dataease/frontend/src/components/canvas/custom-component/DeVideo.vue

162 lines
4.0 KiB
Vue
Raw Normal View History

2021-11-08 19:03:09 +08:00
<template>
<el-row ref="mainPlayer">
<div v-if="this.element.videoLinks.sources[0].src" class="player">
<video-player
ref="videoPlayer"
class="vjs-custom-skin"
:options="playerOptions"
:playsinline="true"
@play="onPlayerPlay($event)"
@pause="onPlayerPause($event)"
@ended="onPlayerEnded($event)"
@loadeddata="onPlayerLoadeddata($event)"
@waiting="onPlayerWaiting($event)"
@playing="onPlayerPlaying($event)"
@timeupdate="onPlayerTimeupdate($event)"
@canplay="onPlayerCanplay($event)"
@canplaythrough="onPlayerCanplaythrough($event)"
@ready="playerReadied"
@statechanged="playerStateChanged($event)"
/>
</div>
<div v-else class="info-class">
请点击添加配置视频信息...
</div>
</el-row>
</template>
<script>
// custom skin css
import '@/custom-theme.css'
import { mapState } from 'vuex'
export default {
props: {
// eslint-disable-next-line vue/require-default-prop
propValue: {
type: String,
require: true
},
// eslint-disable-next-line vue/require-default-prop
element: {
type: Object
},
editMode: {
type: String,
require: false,
default: 'preview'
},
active: {
type: Boolean,
require: false,
default: false
},
h: {
type: Number,
default: 200
}
},
data() {
return {
}
},
computed: {
player() {
return this.$refs.videoPlayer.player
},
playerOptions() {
const videoLinks = this.element.videoLinks
let playHeight = this.h
if (this.canvasStyleData.panel.gap) {
playHeight = this.h - (this.componentGap * 2)
}
videoLinks.height = playHeight
return videoLinks
},
...mapState([
'componentGap',
'canvasStyleData'
])
},
mounted() {
// console.log('this is current player instance object', this.player)
setTimeout(() => {
console.log('dynamic change options', this.player)
// change src
// this.playerOptions.sources[0].src = 'https://cdn.theguardian.tv/webM/2015/07/20/150716YesMen_synd_768k_vp8.webm';
// change item
// this.$set(this.playerOptions.sources, 0, {
// type: "video/mp4",
// src: 'https://cdn.theguardian.tv/webM/2015/07/20/150716YesMen_synd_768k_vp8.webm',
// })
// change array
// this.playerOptions.sources = [{
// type: "video/mp4",
// src: 'https://cdn.theguardian.tv/webM/2015/07/20/150716YesMen_synd_768k_vp8.webm',
// }]
this.player.muted(false)
}, 5000)
},
methods: {
// listen event
onPlayerPlay(player) {
// console.log('player play!', player)
},
onPlayerPause(player) {
// console.log('player pause!', player)
},
onPlayerEnded(player) {
// console.log('player ended!', player)
},
onPlayerLoadeddata(player) {
// console.log('player Loadeddata!', player)
},
onPlayerWaiting(player) {
// console.log('player Waiting!', player)
},
onPlayerPlaying(player) {
// console.log('player Playing!', player)
},
onPlayerTimeupdate(player) {
// console.log('player Timeupdate!', player.currentTime())
},
onPlayerCanplay(player) {
// console.log('player Canplay!', player)
},
onPlayerCanplaythrough(player) {
// console.log('player Ca
// console.log('example 01nplaythrough!', player)
},
// or listen state event
playerStateChanged(playerCurrentState) {
// console.log('player current update state', playerCurrentState)
},
// player is ready
playerReadied(player) {
// seek to 10s
console.log('example player 1 readied', player)
// player.currentTime(10): the player is readied', player)
}
}
}
</script>
<style>
.info-class{
text-align: center;
height: 100%;
display: flex;
align-items: center;
justify-content: center;
background-color: #FFFFFF;
font-size: 12px;
color: #9ea6b2;
}
</style>