import { defineComponent, nextTick, onMounted, onUnmounted, toRefs, watch } from 'vue' import 'plyr/dist/plyr.css' import Plyr from 'plyr' import { ref } from 'vue' import styles from './video.module.less' import iconLoop from '../image/icon-loop.svg' import iconLoopActive from '../image/icon-loop-active.svg' import iconplay from '../image/icon-play.svg' import iconpause from '../image/icon-pause.svg' export default defineComponent({ name: 'video-play', props: { item: { type: Object, default: () => { return {} } }, isEmtry: { type: Boolean, default: false }, isActive: { type: Boolean, default: false } }, emits: ['loadedmetadata', 'togglePlay', 'ended', 'reset'], setup(props, { emit, expose }) { const { item, isEmtry } = toRefs(props) const videoRef = ref() const videoItem: any = ref() const controlID = 'v' + Date.now() + Math.floor(Math.random() * 100) const playBtnId = 'play' + Date.now() + Math.floor(Math.random() * 100) const loopBtnId = 'loop' + Date.now() + Math.floor(Math.random() * 100) const toggleHideControl = (isShow: false) => { videoItem.value?.toggleControls(isShow) } const togglePlay = (e: Event) => { e.stopPropagation() videoItem.value?.togglePlay() } const toggleLoop = (e: Event) => { const loopBtn = document.getElementById(loopBtnId) if (!loopBtn || !videoItem.value) return const isLoop = videoItem.value.loop if (isLoop) { loopBtn.classList.remove(styles.active) } else { loopBtn.classList.add(styles.active) } videoItem.value.loop = !videoItem.value.loop } const onDefault = () => { document.getElementById(controlID)?.addEventListener('click', (e: Event) => { e.stopPropagation() emit('reset') }) document.getElementById(playBtnId)?.addEventListener('click', togglePlay) document.getElementById(loopBtnId)?.addEventListener('click', toggleLoop) } const changePlayBtn = (code: string) => { const playBtn = document.getElementById(playBtnId) if (!playBtn) return if (code == 'play') { playBtn.classList.remove(styles.btnPause) playBtn.classList.add(styles.btnPlay) } else { playBtn.classList.remove(styles.btnPlay) playBtn.classList.add(styles.btnPause) } } const controls = `