diff --git a/src/components/slide/BVideo.vue b/src/components/slide/BVideo.vue index 0983c6a..12a5bf0 100644 --- a/src/components/slide/BVideo.vue +++ b/src/components/slide/BVideo.vue @@ -53,8 +53,8 @@ @touchend="touchend" >
- {{ $duration(currentTime) }} - / {{ $duration(duration) }} + {{ LUtils.$duration(currentTime) }} + / {{ LUtils.$duration(duration) }}
@@ -158,7 +158,7 @@ export default { height: 0, width: 0, isMove: false, - isSingleClick: false, + ignoreWaiting: false,//忽略waiting事件。因为改变进度会触发waiting事件,烦的一批 test: [1, 2], localItem: this.item, progressBarRect: {}, @@ -166,6 +166,7 @@ export default { videoPoster: `?vframe/jpg/offset/0/w/${document.body.clientWidth}`, commentVisible: false, isMarginTop: false, + LUtils: Utils } }, mounted() { @@ -188,9 +189,10 @@ export default { let eventTester = (e, t) => { video.addEventListener(e, () => { + // console.log('eventTester', e, this.item.id) if (e === 'playing') this.loading = false if (e === 'waiting') { - if (!this.paused && !this.isSingleClick) { + if (!this.paused && !this.ignoreWaiting) { this.loading = true } } @@ -283,26 +285,31 @@ export default { this.commentVisible = false } }, - click(val) { - if (this.item.id === val) { - if (this.status === SlideItemPlayStatus.Play) { + click({id, type}) { + if (this.item.id === id) { + if (type === EVENT_KEY.ITEM_TOGGLE) { + if (this.status === SlideItemPlayStatus.Play) { + this.pause() + } else { + this.play() + } + } + if (type === EVENT_KEY.ITEM_STOP) { + this.$refs.video.currentTime = 0 + this.ignoreWaiting = true this.pause() - } else { + setTimeout(() => this.ignoreWaiting = false, 300) + } + if (type === EVENT_KEY.ITEM_PLAY) { + this.$refs.video.currentTime = 0 + this.ignoreWaiting = true this.play() - //这里playg事件,触发之后,会马上触发一次waiting事件。就很烦,会出现点完播放之后闪一下loading的情况,所以用一个变量来规避一下 - // this.isSingleClick = true - setTimeout(() => { - // this.isSingleClick = false - }, 300) + setTimeout(() => this.ignoreWaiting = false, 300) } - this.loading = false } }, play() { this.status = SlideItemPlayStatus.Play - if (this.currentTime !== -1) { - this.$refs.video.currentTime = this.currentTime - } this.$refs.video.volume = 1 this.$refs.video.play() }, @@ -310,9 +317,6 @@ export default { this.status = SlideItemPlayStatus.Pause this.$refs.video.pause() }, - formatNumber(v) { - return Utils.formatNumber(v) - }, touchstart(e) { Utils.$stopPropagation(e) this.start.x = e.touches[0].pageX @@ -335,6 +339,7 @@ export default { Utils.$stopPropagation(e) if (this.isPlaying) return setTimeout(() => this.isMove = false, 1000) + this.$refs.video.currentTime = this.currentTime this.play() } } diff --git a/src/pages/slideHooks/VInfinite.vue b/src/pages/slideHooks/VInfinite.vue index 480f028..0bea03d 100644 --- a/src/pages/slideHooks/VInfinite.vue +++ b/src/pages/slideHooks/VInfinite.vue @@ -4,7 +4,7 @@ import GM from '../../utils' import {getSlideDistance, slideInit, slideReset, slideTouchEnd, slideTouchMove, slideTouchStart} from "./common"; import {SlideType} from "../../utils/const_var"; import SlideItem from './SlideItem' -import bus from "../../utils/bus"; +import bus, {EVENT_KEY} from "../../utils/bus"; import {useStore} from 'vuex' import Utils from "../../utils"; import Dom from "@/utils/dom"; @@ -91,12 +91,19 @@ watch( } ) watch( - ()=>props.index, - ()=>{ - // new Dom(this.wrapper).find(`.v-${this.prefix}-${newVal}-video`).trigger('play') - // setTimeout(() => { - // new Dom(this.wrapper).find(`.v-${this.prefix}-${oldVal}-video`).trigger('stop') - // }, 200) + () => props.index, + (newVal, oldVal) => { + // console.log('watch-index', newVal, oldVal, props.list[newVal].id) + bus.emit(EVENT_KEY.SINGLE_CLICK_BROADCAST, { + id: props.list[newVal].id, + type: EVENT_KEY.ITEM_PLAY + }) + setTimeout(() => { + bus.emit(EVENT_KEY.SINGLE_CLICK_BROADCAST, { + id: props.list[oldVal].id, + type: EVENT_KEY.ITEM_STOP + }) + }, 200) } ) diff --git a/src/pages/slideHooks/index.vue b/src/pages/slideHooks/index.vue index bcb24bb..7d0c69b 100644 --- a/src/pages/slideHooks/index.vue +++ b/src/pages/slideHooks/index.vue @@ -335,12 +335,12 @@ function end() { onMounted(() => { getData() - bus.on('singleClick', () => { + bus.on(EVENT_KEY.SINGLE_CLICK, () => { let id = '' if (state.navIndex === 4) { id = state.recommendVideos[state.itemIndex].id } - bus.emit(EVENT_KEY.SINGLE_CLICK_BROADCAST, id) + bus.emit(EVENT_KEY.SINGLE_CLICK_BROADCAST, {id, type: EVENT_KEY.ITEM_TOGGLE}) }) bus.on('update:item', val => { const {baseIndex, navIndex, itemIndex} = val.position diff --git a/src/utils/bus.js b/src/utils/bus.js index f215a9e..519d326 100644 --- a/src/utils/bus.js +++ b/src/utils/bus.js @@ -42,6 +42,7 @@ export default { } export const EVENT_KEY = { + SINGLE_CLICK: 'SINGLE_CLICK', SINGLE_CLICK_BROADCAST: 'SINGLE_CLICK_BROADCAST', ENTER_FULLSCREEN: 'ENTER_FULLSCREEN', EXIT_FULLSCREEN: 'EXIT_FULLSCREEN', @@ -53,4 +54,7 @@ export const EVENT_KEY = { DIALOG_END: 'DIALOG_END', OPEN_SUB_TYPE: 'OPEN_SUB_TYPE', CLOSE_SUB_TYPE: 'CLOSE_SUB_TYPE', + ITEM_TOGGLE: 'ITEM_TOGGLE', + ITEM_PLAY: 'ITEM_PLAY', + ITEM_STOP: 'ITEM_STOP', } diff --git a/src/utils/mixin.js b/src/utils/mixin.js index ed5a1ad..9f51263 100644 --- a/src/utils/mixin.js +++ b/src/utils/mixin.js @@ -15,7 +15,7 @@ import Loading from "../components/Loading"; import BaseButton from "../components/BaseButton"; import CONST_VAR from "./const_var"; import Dom from "./dom"; -import bus from "./bus"; +import bus, {EVENT_KEY} from "./bus"; import {random} from "lodash"; export default { @@ -152,7 +152,7 @@ export default { } else { clickTimer = setTimeout(() => { console.log('单击') - bus.emit('singleClick') + bus.emit(EVENT_KEY.SINGLE_CLICK) }, checkTime); } lastClickTime = nowTime;