90 lines
2.0 KiB
Vue
90 lines
2.0 KiB
Vue
<template>
|
|
<div id="player" style="width: 100%;height: 300px;"></div>
|
|
</template>
|
|
<script>
|
|
export default {
|
|
props: {
|
|
src: {
|
|
type: String,
|
|
default () {
|
|
return ''
|
|
}
|
|
}
|
|
},
|
|
data() {
|
|
return {
|
|
vodPlayerJs: 'https://player.polyv.net/resp/vod-player/latest/player.js',
|
|
vid: '',
|
|
};
|
|
},
|
|
|
|
mounted() {
|
|
this.loadPlayerScript(this.loadPlayer);
|
|
},
|
|
watch: {
|
|
// 监听 src 变化,当父组件 filepaths 更新时触发
|
|
src(newVal, oldVal) {
|
|
if (newVal && newVal !== oldVal) {
|
|
const parsedUrl = new URL(newVal);
|
|
let vid = parsedUrl.searchParams.get('vid');
|
|
// 当 src 变化时,执行重新加载逻辑
|
|
// this.reloadVideo();
|
|
this.player.changeVid({
|
|
wrap: '#player',
|
|
width: '100%',
|
|
height: '100%',
|
|
vid: vid,
|
|
// ban_seek:'on',
|
|
ban_history_time: "on", // 开启续播
|
|
ban_seek_by_limit_time: 'on',
|
|
showHd: false,
|
|
showAuto: false,
|
|
showLine: false,
|
|
speed: false,
|
|
// hideRepeat:true
|
|
}) // 切换下一个视频
|
|
}
|
|
}
|
|
},
|
|
|
|
methods: {
|
|
loadPlayerScript(callback) {
|
|
if (!window.polyvPlayer) {
|
|
const myScript = document.createElement('script');
|
|
myScript.setAttribute('src', this.vodPlayerJs);
|
|
myScript.onload = callback;
|
|
document.body.appendChild(myScript);
|
|
} else {
|
|
callback();
|
|
}
|
|
},
|
|
|
|
loadPlayer() {
|
|
const parsedUrl = new URL(this.src);
|
|
this.vid = parsedUrl.searchParams.get('vid');
|
|
const polyvPlayer = window.polyvPlayer;
|
|
this.player = polyvPlayer({
|
|
wrap: '#player',
|
|
width: '100%',
|
|
height: '100%',
|
|
vid: this.vid,
|
|
ban_history_time: "on", // 开启续播
|
|
ban_seek_by_limit_time: 'on',
|
|
showHd: false,
|
|
showAuto: false,
|
|
showLine: false,
|
|
speed: false,
|
|
// hideRepeat:true
|
|
})
|
|
this.player.on('s2j_onPlayOver', (...params) => {
|
|
this.$emit('over')
|
|
})
|
|
}
|
|
},
|
|
destroyed() {
|
|
if (this.player) {
|
|
this.player.destroy();
|
|
}
|
|
}
|
|
};
|
|
</script> |