import { defineComponent, onMounted, ref, watch, Transition, toRefs, nextTick } from 'vue' import styles from './index.module.less' import { Slider } from 'vant' import iconplay from '../coursewarePlay/image/icon-play.svg' import iconpause from '../coursewarePlay/image/icon-pause.svg' import iconVideobg from '../coursewarePlay/image/icon-videobg.png' import { getSecondRPM } from '@/helpers/utils' import TCPlayer from 'tcplayer.js' import 'tcplayer.js/dist/tcplayer.min.css' export default defineComponent({ name: 'video-class', props: { item: { type: Object, default: () => { return {} } }, modal: { type: Boolean, default: true } }, emits: ['loadedmetadata', 'togglePlay', 'ended', 'reset', 'error', 'close', 'changeModal'], setup(props, { emit }) { const { item, modal } = toRefs(props) const videoItem = ref() const videoID = 'video' + Date.now() + Math.floor(Math.random() * 100) const __init = () => { if (videoItem.value) { nextTick(() => { videoItem.value?.pause() }) console.log(props.item, item.value) videoItem.value.poster(props.item.coverImg) // 封面 videoItem.value.src(props.item.content) // url 播放地址 videoItem.value.loop(props.item.loop) videoItem.value.muted(props.item.muted) videoItem.value.autoplay(props.item.autoplay) // 初步加载时 videoItem.value.one('loadedmetadata', (e: any) => { if (item.value.autoplay && videoItem.value) { videoItem.value?.play() } // 获取时长 const videoEle = videoItem.value item.value.duration = videoEle.duration() item.value.videoEle = videoEle item.value.loaded = true emit('loadedmetadata', videoItem.value) }) // 视频播放时加载 videoItem.value.on('timeupdate', () => { if (!item.value.loaded) return const videoEle = videoItem.value item.value.currentTime = videoEle.currentTime() }) // 视频播放结束 videoItem.value.on('ended', () => { emit('ended', item.value) }) // videoItem.value.on('pause', () => { console.log('暂停') //暂停 item.value.paused = true item.value.videoEle?.pause() }) videoItem.value.on('play', () => { item.value.paused = false // 播放 if (item.value.muted) { item.value.muted = false item.value.videoEle?.muted(false) item.value.videoEle?.volume(1) item.value.videoEle?.pause() } }) // 视频播放异常 videoItem.value.on('error', () => { emit('error') }) } } onMounted(() => { videoItem.value = TCPlayer(videoID, { appID: '', controls: false, loop: item.value.loop, muted: item.value.muted // autoplay: true }) // player-container-id 为播放器容器 ID,必须与 html 中一致 __init() }) watch( () => props.item, () => { __init() } ) return () => ( <>