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,6 +15,12 @@ const props = defineProps({ | ||
15 | sourceSrc: { | 15 | sourceSrc: { |
16 | type: String | 16 | type: String |
17 | }, | 17 | }, |
18 | + name: { | ||
19 | + type: String | ||
20 | + }, | ||
21 | + avatar: { | ||
22 | + type: String | ||
23 | + }, | ||
18 | w: { | 24 | w: { |
19 | type: Number, | 25 | type: Number, |
20 | default: 300 | 26 | default: 300 |
@@ -41,7 +47,8 @@ const options: VideoJsPlayerOptions = { | @@ -41,7 +47,8 @@ const options: VideoJsPlayerOptions = { | ||
41 | preload: 'auto', // 预加载 | 47 | preload: 'auto', // 预加载 |
42 | autoplay: true, // 是否自动播放 | 48 | autoplay: true, // 是否自动播放 |
43 | fluid: false, // 自适应宽高 | 49 | fluid: false, // 自适应宽高 |
44 | - src: props.sourceSrc, // 要嵌入的视频源的源 URL | 50 | + poster: props?.avatar || '', |
51 | + src: props?.sourceSrc || '', // 要嵌入的视频源的源 URL | ||
45 | muted: true, | 52 | muted: true, |
46 | userActions: { | 53 | userActions: { |
47 | hotkeys: true | 54 | hotkeys: true |
@@ -2,7 +2,17 @@ | @@ -2,7 +2,17 @@ | ||
2 | <div class="banner-box" ref="root"> | 2 | <div class="banner-box" ref="root"> |
3 | <div class="wrapper"> | 3 | <div class="wrapper"> |
4 | <div v-for="(item, index) in option.dataset" :key="index + item" :class="item.className" :style="item.sty"> | 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 | </div> | 16 | </div> |
7 | </div> | 17 | </div> |
8 | <a href="javascript:;" class="left" @click="changeSlide('left')"></a> | 18 | <a href="javascript:;" class="left" @click="changeSlide('left')"></a> |
@@ -37,46 +47,48 @@ let interval = ref(4000) | @@ -37,46 +47,48 @@ let interval = ref(4000) | ||
37 | 47 | ||
38 | const computedFunc = (initial: number, source: any) => { | 48 | const computedFunc = (initial: number, source: any) => { |
39 | if (initial < 0) initial = 0 | 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 | watch( | 94 | watch( |
@@ -156,6 +168,15 @@ function changeSlide(dir: string) { | @@ -156,6 +168,15 @@ function changeSlide(dir: string) { | ||
156 | transform: translate(-50%, -50%); | 168 | transform: translate(-50%, -50%); |
157 | transition: 0.5s; | 169 | transition: 0.5s; |
158 | box-shadow: 0 0 4px black; | 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 | .arrow { | 182 | .arrow { |