|
@@ -44,7 +44,7 @@ export default defineComponent({
|
|
|
default: false
|
|
|
}
|
|
|
},
|
|
|
- emits: ['loadedmetadata', 'togglePlay', 'ended', 'reset', 'close', 'error'],
|
|
|
+ emits: ['canplay', 'pause', 'togglePlay', 'ended', 'reset', 'close', 'error'],
|
|
|
setup(props, { emit, expose }) {
|
|
|
const videoID = 'video' + Date.now() + Math.floor(Math.random() * 100);
|
|
|
const videoItem = ref();
|
|
@@ -119,7 +119,7 @@ export default defineComponent({
|
|
|
if (videoItem.value) {
|
|
|
console.log(videoItem.value);
|
|
|
videoItem.value.poster(props.item.coverImg); // 封面
|
|
|
- videoItem.value.src(isEmtry.value ? '' : item.value.content); // url 播放地址
|
|
|
+ videoItem.value.src(item.value.content); // url 播放地址
|
|
|
|
|
|
// 初步加载时
|
|
|
videoItem.value.one('loadedmetadata', (e: any) => {
|
|
@@ -128,7 +128,17 @@ export default defineComponent({
|
|
|
// 获取时长
|
|
|
data.duration = videoItem.value.duration();
|
|
|
|
|
|
- emit('loadedmetadata', videoItem.value);
|
|
|
+ emit('canplay', videoItem.value);
|
|
|
+ });
|
|
|
+ // 视频开始播放
|
|
|
+ videoItem.value.on('play', () => {
|
|
|
+ emit('close')
|
|
|
+ emit('canplay')
|
|
|
+ });
|
|
|
+ //
|
|
|
+ videoItem.value.on('pause', () => {
|
|
|
+ data.playState = 'pause';
|
|
|
+ emit('pause')
|
|
|
});
|
|
|
|
|
|
// 视频播放时加载
|
|
@@ -136,24 +146,20 @@ export default defineComponent({
|
|
|
if (data.timer) return;
|
|
|
data.currentTime = videoItem.value.currentTime();
|
|
|
});
|
|
|
-
|
|
|
// 视频播放结束
|
|
|
videoItem.value.on('ended', () => {
|
|
|
data.playState = 'pause';
|
|
|
emit('ended');
|
|
|
- });
|
|
|
-
|
|
|
- //
|
|
|
- videoItem.value.on('pause', () => {
|
|
|
- data.playState = 'pause';
|
|
|
- });
|
|
|
+ });
|
|
|
|
|
|
videoItem.value.on('playing', () => {
|
|
|
data.playState = 'play';
|
|
|
});
|
|
|
|
|
|
videoItem.value.on('canplay', (e: any) => {
|
|
|
- console.log('canplay', e);
|
|
|
+ console.log('canplay', );
|
|
|
+ data.duration = videoItem.value.duration();
|
|
|
+ emit('canplay')
|
|
|
});
|
|
|
|
|
|
// 视频播放异常
|
|
@@ -164,27 +170,36 @@ export default defineComponent({
|
|
|
}
|
|
|
};
|
|
|
|
|
|
+ watch(() => props.item, (val, oldVal) => {
|
|
|
+ videoItem.value.currentTime(0)
|
|
|
+ videoItem.value.poster(props.item.coverImg); // 封面
|
|
|
+ videoItem.value.src(item.value.content); // url 播放地址
|
|
|
+ data.playState = 'pause';
|
|
|
+ })
|
|
|
+
|
|
|
onMounted(() => {
|
|
|
__init();
|
|
|
});
|
|
|
|
|
|
+ const pause = () => {
|
|
|
+ videoItem.value.pause();
|
|
|
+ }
|
|
|
+
|
|
|
expose({
|
|
|
- onPlay
|
|
|
+ onPlay,
|
|
|
+ pause
|
|
|
});
|
|
|
return () => (
|
|
|
<div class={styles.videoWrap}>
|
|
|
<div class={styles.content}>
|
|
|
<div ref={contetRef} class={styles.contentWrap}>
|
|
|
- {!data.reload && (
|
|
|
- <video
|
|
|
- style={{ width: '100%', height: '100%' }}
|
|
|
- poster={props.item.coverImg}
|
|
|
- src={isEmtry.value ? '' : item.value.content}
|
|
|
- id={videoID}
|
|
|
- preload="auto"
|
|
|
- playsinline
|
|
|
- webkit-playsinline></video>
|
|
|
- )}
|
|
|
+ <video
|
|
|
+ style={{ width: '100%', height: '100%' }}
|
|
|
+ id={videoID}
|
|
|
+ preload="auto"
|
|
|
+ playsinline
|
|
|
+ webkit-playsinline
|
|
|
+ x5-video-player-type="h5"></video>
|
|
|
</div>
|
|
|
<div class={styles.videoSection}></div>
|
|
|
</div>
|
|
@@ -193,8 +208,11 @@ export default defineComponent({
|
|
|
class={[styles.controls, props.showModel ? '' : styles.hide]}
|
|
|
onClick={(e: Event) => {
|
|
|
e.stopPropagation();
|
|
|
+ if(videoItem.value.paused()) return
|
|
|
+ emit('close');
|
|
|
}}
|
|
|
onTouchmove={(e: TouchEvent) => {
|
|
|
+ if(videoItem.value.paused()) return
|
|
|
emit('close');
|
|
|
}}>
|
|
|
<div class={styles.time}>
|
|
@@ -211,7 +229,7 @@ export default defineComponent({
|
|
|
onUpdate:value={val => handleChangeTime(val)}
|
|
|
/>
|
|
|
</div>
|
|
|
- <div class={styles.actions} onClick={() => emit('close')}>
|
|
|
+ <div class={styles.actions}>
|
|
|
<div
|
|
|
class={styles.actionBtn}
|
|
|
onClick={() =>
|