ebc

index.vue 2.6KB

    <template> <div> <video ref="player" class="video-js vjs-default-skin vjs-big-play-centered"></video> </div> </template> <script> import videojs from 'video.js' window.videojs = videojs require('videojs-playlist') require('video.js/dist/lang/zh-CN.js') require('video.js/dist/video-js.min.css') const defaultPlayerOptions = { controls: true, autoplay: false, muted: false, language: 'zh-CN', fluid: true, // liveui: true, controlBar: { children: [ {name: 'playToggle'}, // 播放按钮 {name: 'currentTimeDisplay'}, // 当前已播放时间 {name: 'progressControl'}, // 播放进度条 {name: 'durationDisplay'}, // 总时间 { // 倍数播放 name: 'playbackRateMenuButton', playbackRates: [0.5, 1, 1.5, 2, 2.5] }, { name: 'volumePanel', // 音量控制 inline: true // 不使用水平方式 }, {name: 'FullscreenToggle'}, // 全屏 {name: 'FullscreenToggle'} ] } } export default { name: 'VideoPlayer', props: { sources: { type: Array, default: () => [] }, options: { type: Object, default() { return {} } }, autoadvance: { type: Number, default: null } }, data() { const playerOptions = Object.assign({}, defaultPlayerOptions, this.options) return { player: null, playerOptions } }, computed: { playlist() { return this.sources } }, watch: { playlist: { handler(list) { if (!this.player) return this.player.playlist(list) if (list.length > 0) { this.player.playlist.autoadvance(this.autoadvance) // this.player.playlist.first(); } this.$emit('playlistchange', list) }, immediate: true } }, mounted() { this.init() }, beforeDestroy() { if (this.player) { this.player.dispose() } }, methods: { init() { const player = videojs(this.$refs.player, this.playerOptions) this.player = player this.player.on('playlistitem', (...args) => { this.$emit('playlistitem', ...args) }) this.$emit('player-inited', player) } } } </script> <style lang="scss"> .vjs-paused .vjs-big-play-button, .vjs-paused.vjs-has-started .vjs-big-play-button { display: block; } .vjs-slider-vertical .vjs-volume-level:before { top: -.4em; left: -.4em; } .video-js { .vjs-play-progress:before { top: -.5em; transform-origin: center; } .vjs-progress-control:hover { .vjs-play-progress:before { transform: translateY(0.17em); } } } </style>