vue 配合 video.js 实现视频播放

本文介绍了如何在Vue项目中使用video.js库创建一个支持HTML5视频的可控制播放器,包括引入库、模板实现、事件监听和销毁处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 导入 video.js 包

npm install video.js -S

 npm install videojs-flash -S
 

2. 代码实现

<template>
  <div>
    <video
      id="my-video"
      class="video-js"
      controls
      preload="auto"
      width="640"
      height="264"
      :poster="videoTitleImg"
      data-setup="{}"
      ref="videoPlayer"

    >
      <source :src="videoSrc" type="video/mp4"/>
      <source src="MY_VIDEO.webm" type="video/webm"/>
      <div class="video-progress" @mousedown="onProgressMouseDown">
        <div class="video-played" ref="progressBar"></div>
      </div>
      <p class="vjs-no-js">
        To view this video please enable JavaScript, and consider upgrading to a
        web browser that
        <a href="https://videojs.com/html5-video-support/" target="_blank"
        >supports HTML5 video</a
        >
      </p>
    </video>


  </div>
</template>

<script>
import videoJs from 'video.js'

export default {
  props: {
    videoTitleImg: '',
    videoSrc: ''
  },
  data () {
    return {
      dragging: false
    }
  },
  methods: {
    // onProgressMouseDown (event) {
    //   this.dragging = true
    //   this.startX = event.clientX
    //   this.startTime = this.player.currentTime()
    //   document.addEventListener('mousemove', this.onProgressMouseMove)
    //   document.addEventListener('mouseup', this.onProgressMouseUp)
    // },
    // onProgressMouseMove (event) {
    //   if (this.dragging) {
    //     console.log('xxxxx', event, 'progressBar', this.$refs.progressBar.parentNode)
    //     const deltaX = event.clientX - this.startX
    //     const ratio = deltaX / this.$refs.progressBar.parentNode.offsetWidth
    //     const newTime = this.startTime + ratio * this.player.duration()
    //     this.player.currentTime(newTime)
    //   }
    // },
    // onProgressMouseUp () {
    //   this.dragging = false
    //   document.removeEventListener('mousemove', this.onProgressMouseMove)
    //   document.removeEventListener('mouseup', this.onProgressMouseUp)
    // }
  },
  mounted () {

    this.player = videoJs(this.$refs.videoPlayer)

    // 监听进度条拖动事件
    this.player.on('timeupdate', (time) => {
      if (this.player.userActive()) {
        // 用户正在拖动进度条
        // 可以在这里执行你需要的操作
      }
    })
  },
  beforeDestroy () {
    if (this.player) {
      this.player.dispose()
    }
  }
}
</script>
<style scoped>
.video-progress {
  position: relative;
  width: 100%;
  height: 5px;
  background-color: #e5e5e5;
  cursor: pointer;
}

.video-played {
  position: absolute;
  left: 0;
  height: 100%;
  background-color: #3e8f3e;
}
</style>

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值