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 {} } }, /** 是否会员 */ isMember: { type: Boolean, default: true }, modal: { type: Boolean, default: true } }, emits: ['loadedmetadata', 'togglePlay', 'ended', 'reset', 'error', 'close', 'changeModal'], setup(props, { emit }) { const { item, modal, isMember } = 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) => { // 获取时长 const videoEle = videoItem.value item.value.duration = videoEle.duration() item.value.videoEle = videoEle item.value.loaded = true emit('loadedmetadata', videoItem.value) if (item.value.autoplay && videoItem.value) { item.value.muted = false item.value.videoEle?.muted(false) item.value.videoEle?.volume(1) // item.value.videoEle?.pause() videoItem.value?.play() } else { item.value.muted = false item.value.videoEle?.muted(false) item.value.videoEle?.volume(1) item.value.videoEle?.pause() } }) // 视频播放时加载 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() setTimeout(() => { item.value.videoEle?.pause() }, 100) }) videoItem.value.on('play', () => { item.value.paused = false // 播放 // console.log(JSON.parse(JSON.stringify(item.value)), 'play ------ ') // 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: false // autoplay: true }) // player-container-id 为播放器容器 ID,必须与 html 中一致 __init() }) watch( () => props.item, () => { item.value.videoEle?.pause() __init() } ) return () => ( <>