Commit d3e66a31e31149e072d87079affd28f85985f8a0
1 parent
2325b748
perf(external/Composes): 摄像头新增视频标题
Showing
2 changed files
with
70 additions
and
42 deletions
| ... | ... | @@ -15,6 +15,12 @@ const props = defineProps({ |
| 15 | 15 | sourceSrc: { |
| 16 | 16 | type: String |
| 17 | 17 | }, |
| 18 | + name: { | |
| 19 | + type: String | |
| 20 | + }, | |
| 21 | + avatar: { | |
| 22 | + type: String | |
| 23 | + }, | |
| 18 | 24 | w: { |
| 19 | 25 | type: Number, |
| 20 | 26 | default: 300 |
| ... | ... | @@ -41,7 +47,8 @@ const options: VideoJsPlayerOptions = { |
| 41 | 47 | preload: 'auto', // 预加载 |
| 42 | 48 | autoplay: true, // 是否自动播放 |
| 43 | 49 | fluid: false, // 自适应宽高 |
| 44 | - src: props.sourceSrc, // 要嵌入的视频源的源 URL | |
| 50 | + poster: props?.avatar || '', | |
| 51 | + src: props?.sourceSrc || '', // 要嵌入的视频源的源 URL | |
| 45 | 52 | muted: true, |
| 46 | 53 | userActions: { |
| 47 | 54 | hotkeys: true | ... | ... |
| ... | ... | @@ -2,7 +2,17 @@ |
| 2 | 2 | <div class="banner-box" ref="root"> |
| 3 | 3 | <div class="wrapper"> |
| 4 | 4 | <div v-for="(item, index) in option.dataset" :key="index + item" :class="item.className" :style="item.sty"> |
| 5 | - <CameraItem ref="cameraRef" :key="item + index" :sourceSrc="item.url" :w="w" :h="h" :index="index" /> | |
| 5 | + <CameraItem | |
| 6 | + ref="cameraRef" | |
| 7 | + :name="item.name" | |
| 8 | + :avatar="item.avatar" | |
| 9 | + :key="item + index" | |
| 10 | + :sourceSrc="item.url" | |
| 11 | + :w="w" | |
| 12 | + :h="h" | |
| 13 | + :index="index" | |
| 14 | + /> | |
| 15 | + <span class="video-title">{{ item.name }}</span> | |
| 6 | 16 | </div> |
| 7 | 17 | </div> |
| 8 | 18 | <a href="javascript:;" class="left" @click="changeSlide('left')"></a> |
| ... | ... | @@ -37,46 +47,48 @@ let interval = ref(4000) |
| 37 | 47 | |
| 38 | 48 | const computedFunc = (initial: number, source: any) => { |
| 39 | 49 | if (initial < 0) initial = 0 |
| 40 | - let len = source.length, | |
| 41 | - temp1 = initial - 2 < 0 ? initial - 2 + len : initial - 2, | |
| 42 | - temp2 = initial - 1 < 0 ? initial - 1 + len : initial - 1, | |
| 43 | - temp3 = initial, | |
| 44 | - temp4 = initial + 1 >= len ? initial + 1 - len : initial + 1, | |
| 45 | - temp5 = initial + 2 >= len ? initial + 2 - len : initial + 2 | |
| 46 | - return source.map((item: any, index: number) => { | |
| 47 | - let transform = `translate(-50%, -50%) scale(0.7)`, | |
| 48 | - zIndex = 0, | |
| 49 | - className = 'slide' | |
| 50 | - switch (index) { | |
| 51 | - case temp3: | |
| 52 | - transform = `translate(-50%, -50%) scale(1)` | |
| 53 | - className = ['slide', 'activate'] as any | |
| 54 | - zIndex = 3 | |
| 55 | - break | |
| 56 | - case temp1: | |
| 57 | - transform = `translate(-80%, -50%) scale(0.7)` | |
| 58 | - zIndex = 1 | |
| 59 | - break | |
| 60 | - case temp5: | |
| 61 | - transform = `translate(100%, -50%) scale(0.7)` | |
| 62 | - zIndex = 1 | |
| 63 | - break | |
| 64 | - case temp2: | |
| 65 | - transform = `translate(-100%, -50%) scale(0.85)` | |
| 66 | - zIndex = 2 | |
| 67 | - break | |
| 68 | - case temp4: | |
| 69 | - transform = `translate(58%, -50%) scale(0.85)` | |
| 70 | - zIndex = 2 | |
| 71 | - break | |
| 72 | - } | |
| 73 | - item.sty = { | |
| 74 | - transform, | |
| 75 | - zIndex | |
| 76 | - } | |
| 77 | - item.className = className | |
| 78 | - return item | |
| 79 | - }) | |
| 50 | + if (Array.isArray(source)) { | |
| 51 | + let len = source.length, | |
| 52 | + temp1 = initial - 2 < 0 ? initial - 2 + len : initial - 2, | |
| 53 | + temp2 = initial - 1 < 0 ? initial - 1 + len : initial - 1, | |
| 54 | + temp3 = initial, | |
| 55 | + temp4 = initial + 1 >= len ? initial + 1 - len : initial + 1, | |
| 56 | + temp5 = initial + 2 >= len ? initial + 2 - len : initial + 2 | |
| 57 | + return source?.map((item: any, index: number) => { | |
| 58 | + let transform = `translate(-50%, -50%) scale(0.7)`, | |
| 59 | + zIndex = 0, | |
| 60 | + className = 'slide' | |
| 61 | + switch (index) { | |
| 62 | + case temp3: | |
| 63 | + transform = `translate(-50%, -50%) scale(1)` | |
| 64 | + className = ['slide', 'activate'] as any | |
| 65 | + zIndex = 3 | |
| 66 | + break | |
| 67 | + case temp1: | |
| 68 | + transform = `translate(-80%, -50%) scale(0.7)` | |
| 69 | + zIndex = 1 | |
| 70 | + break | |
| 71 | + case temp5: | |
| 72 | + transform = `translate(100%, -50%) scale(0.7)` | |
| 73 | + zIndex = 1 | |
| 74 | + break | |
| 75 | + case temp2: | |
| 76 | + transform = `translate(-100%, -50%) scale(0.85)` | |
| 77 | + zIndex = 2 | |
| 78 | + break | |
| 79 | + case temp4: | |
| 80 | + transform = `translate(58%, -50%) scale(0.85)` | |
| 81 | + zIndex = 2 | |
| 82 | + break | |
| 83 | + } | |
| 84 | + item.sty = { | |
| 85 | + transform, | |
| 86 | + zIndex | |
| 87 | + } | |
| 88 | + item.className = className | |
| 89 | + return item | |
| 90 | + }) | |
| 91 | + } | |
| 80 | 92 | } |
| 81 | 93 | |
| 82 | 94 | watch( |
| ... | ... | @@ -156,6 +168,15 @@ function changeSlide(dir: string) { |
| 156 | 168 | transform: translate(-50%, -50%); |
| 157 | 169 | transition: 0.5s; |
| 158 | 170 | box-shadow: 0 0 4px black; |
| 171 | + .video-title { | |
| 172 | + width: v-bind('w+"px"'); | |
| 173 | + font-size: 30px; | |
| 174 | + color: white; | |
| 175 | + position: absolute; | |
| 176 | + bottom: 6%; | |
| 177 | + left: 10%; | |
| 178 | + z-index: 999; | |
| 179 | + } | |
| 159 | 180 | } |
| 160 | 181 | } |
| 161 | 182 | .arrow { | ... | ... |