master
parent
de2f5a9d00
commit
2bafdc42ce
|
@ -16,7 +16,7 @@
|
||||||
|
|
||||||
- @bd/core 针对`web components`的核心封装库, 以数据驱动, 可以更方便的开发 wc 组件
|
- @bd/core 针对`web components`的核心封装库, 以数据驱动, 可以更方便的开发 wc 组件
|
||||||
|
|
||||||
### 开发进度 && 计划 (37/54)
|
### 开发进度 && 计划 (37/55)
|
||||||
|
|
||||||
- [x] `wc-card` 卡片组件
|
- [x] `wc-card` 卡片组件
|
||||||
- [x] `wc-space` 间隔组件
|
- [x] `wc-space` 间隔组件
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
* @author yutent<yutent.io@gmail.com>
|
* @author yutent<yutent.io@gmail.com>
|
||||||
* @date 2023/05/05 14:56:34
|
* @date 2023/05/05 14:56:34
|
||||||
*/
|
*/
|
||||||
import { css, html, Component } from '@bd/core'
|
import { css, html, Component, classMap } from '@bd/core'
|
||||||
|
|
||||||
import '../avatar/index.js'
|
import '../avatar/index.js'
|
||||||
|
|
||||||
|
@ -11,7 +11,9 @@ class Bubble extends Component {
|
||||||
static props = {
|
static props = {
|
||||||
type: 'text',
|
type: 'text',
|
||||||
content: '',
|
content: '',
|
||||||
avatar: ''
|
voiceLength: 0,
|
||||||
|
avatar: '',
|
||||||
|
readOnly: true
|
||||||
}
|
}
|
||||||
|
|
||||||
static styles = [
|
static styles = [
|
||||||
|
@ -82,9 +84,74 @@ class Bubble extends Component {
|
||||||
object-fit: contain;
|
object-fit: contain;
|
||||||
-webkit-user-drag: none;
|
-webkit-user-drag: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.type-voice {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
|
||||||
|
.wave {
|
||||||
|
position: relative;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
width: 52rpx;
|
||||||
|
height: 44rpx;
|
||||||
|
|
||||||
|
.i {
|
||||||
|
position: absolute;
|
||||||
|
width: 8rpx;
|
||||||
|
height: 8rpx;
|
||||||
|
border: 4rpx solid transparent;
|
||||||
|
border-right-color: rgba(0, 0, 0, 0.2);
|
||||||
|
border-radius: 50%;
|
||||||
|
|
||||||
|
&:nth-child(1) {
|
||||||
|
border: 0;
|
||||||
|
background: rgba(0, 0, 0, 0.2);
|
||||||
|
}
|
||||||
|
&:nth-child(2) {
|
||||||
|
left: -8rpx;
|
||||||
|
width: 24rpx;
|
||||||
|
height: 24rpx;
|
||||||
|
}
|
||||||
|
&:nth-child(3) {
|
||||||
|
left: -12rpx;
|
||||||
|
width: 36rpx;
|
||||||
|
height: 36rpx;
|
||||||
|
}
|
||||||
|
&:nth-child(4) {
|
||||||
|
left: -16rpx;
|
||||||
|
width: 48rpx;
|
||||||
|
height: 48rpx;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
&.on .i {
|
||||||
|
border-right-color: rgba(0, 0, 0, 0);
|
||||||
|
animation: play 1.2s infinite;
|
||||||
|
|
||||||
|
&:nth-child(3) {
|
||||||
|
animation-delay: 0.3s;
|
||||||
|
}
|
||||||
|
&:nth-child(4) {
|
||||||
|
animation-delay: 0.6s;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes play {
|
||||||
|
from,
|
||||||
|
to {
|
||||||
|
border-right-color: rgba(0, 0, 0, 0);
|
||||||
|
}
|
||||||
|
50% {
|
||||||
|
border-right-color: rgba(0, 0, 0, 0.2);
|
||||||
|
}
|
||||||
|
}
|
||||||
`
|
`
|
||||||
]
|
]
|
||||||
|
|
||||||
|
#playing = false
|
||||||
|
|
||||||
#drawContent() {
|
#drawContent() {
|
||||||
switch (this.type) {
|
switch (this.type) {
|
||||||
case 'text':
|
case 'text':
|
||||||
|
@ -94,7 +161,15 @@ class Bubble extends Component {
|
||||||
return html`<img class="img-thumb" src=${this.content} />`
|
return html`<img class="img-thumb" src=${this.content} />`
|
||||||
|
|
||||||
case 'voice':
|
case 'voice':
|
||||||
return html`<audio src="" controls></audio>`
|
return html`<div class="type-voice">
|
||||||
|
<div class=${classMap({ wave: true, on: this.#playing })}>
|
||||||
|
<i class="i"></i>
|
||||||
|
<i class="i"></i>
|
||||||
|
<i class="i"></i>
|
||||||
|
<i class="i"></i>
|
||||||
|
</div>
|
||||||
|
<span class="duration">${this.voiceLength}'</span>
|
||||||
|
</div> `
|
||||||
|
|
||||||
case 'media':
|
case 'media':
|
||||||
return html`<audio src=""></audio>`
|
return html`<audio src=""></audio>`
|
||||||
|
|
Loading…
Reference in New Issue