当前位置:首页 > VUE

vue实现视频

2026-03-07 08:19:15VUE

Vue 实现视频播放功能

使用 HTML5 <video> 标签

Vue 可以直接使用 HTML5 的 <video> 标签实现视频播放。通过绑定 src 属性和控制播放状态,可以轻松实现视频功能。

vue实现视频

<template>
  <div>
    <video ref="videoPlayer" controls :src="videoSrc" @play="onPlay" @pause="onPause"></video>
    <button @click="togglePlay">{{ isPlaying ? 'Pause' : 'Play' }}</button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      videoSrc: 'path/to/video.mp4',
      isPlaying: false
    }
  },
  methods: {
    togglePlay() {
      if (this.isPlaying) {
        this.$refs.videoPlayer.pause()
      } else {
        this.$refs.videoPlayer.play()
      }
    },
    onPlay() {
      this.isPlaying = true
    },
    onPause() {
      this.isPlaying = false
    }
  }
}
</script>

使用第三方库(如 video.js

如果需要更丰富的功能(如自定义控件、字幕支持等),可以集成 video.js 或其他视频播放库。

vue实现视频

<template>
  <div>
    <video ref="videoPlayer" class="video-js"></video>
  </div>
</template>

<script>
import videojs from 'video.js'
import 'video.js/dist/video-js.css'

export default {
  data() {
    return {
      player: null
    }
  },
  mounted() {
    this.player = videojs(this.$refs.videoPlayer, {
      controls: true,
      sources: [{
        src: 'path/to/video.mp4',
        type: 'video/mp4'
      }]
    })
  },
  beforeDestroy() {
    if (this.player) {
      this.player.dispose()
    }
  }
}
</script>

实现视频流(如 HLS/DASH)

对于流媒体视频(如 .m3u8.mpd 格式),可以使用 hls.jsdash.js 库。

<template>
  <div>
    <video ref="videoPlayer" controls></video>
  </div>
</template>

<script>
import Hls from 'hls.js'

export default {
  mounted() {
    const videoSrc = 'path/to/stream.m3u8'
    const video = this.$refs.videoPlayer

    if (Hls.isSupported()) {
      const hls = new Hls()
      hls.loadSource(videoSrc)
      hls.attachMedia(video)
      hls.on(Hls.Events.MANIFEST_PARSED, () => {
        video.play()
      })
    } else if (video.canPlayType('application/vnd.apple.mpegurl')) {
      video.src = videoSrc
      video.addEventListener('loadedmetadata', () => {
        video.play()
      })
    }
  }
}
</script>

自定义视频控件

可以通过 Vue 的响应式特性自定义视频控件,例如进度条、音量控制等。

<template>
  <div>
    <video ref="videoPlayer" :src="videoSrc" @timeupdate="updateProgress"></video>
    <div class="controls">
      <input type="range" v-model="progress" min="0" max="100" @input="seekTo">
      <button @click="toggleMute">{{ isMuted ? 'Unmute' : 'Mute' }}</button>
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      videoSrc: 'path/to/video.mp4',
      progress: 0,
      isMuted: false
    }
  },
  methods: {
    updateProgress() {
      const video = this.$refs.videoPlayer
      this.progress = (video.currentTime / video.duration) * 100
    },
    seekTo() {
      const video = this.$refs.videoPlayer
      video.currentTime = (this.progress / 100) * video.duration
    },
    toggleMute() {
      const video = this.$refs.videoPlayer
      video.muted = !video.muted
      this.isMuted = video.muted
    }
  }
}
</script>

以上方法可以根据需求选择或组合使用,实现不同复杂度的视频播放功能。

标签: 视频vue
分享给朋友:

相关文章

vue实现aop切面

vue实现aop切面

Vue 实现 AOP 切面编程的方法 在 Vue 中实现 AOP(面向切面编程)可以通过多种方式,以下是几种常见的实现方法: 使用 Vue 混入(Mixins) Vue 的混入机制可以用于实现横切关…

vue实现双折线图

vue实现双折线图

实现双折线图的步骤 安装必要的依赖库(如 ECharts 或 Chart.js),这里以 ECharts 为例: npm install echarts --save 在 Vue 组件中引入 ECh…

vue实现发送值接受值

vue实现发送值接受值

Vue 实现父子组件传值 父组件向子组件传值(props) 父组件通过 v-bind 或简写 : 向子组件传递数据。子组件通过 props 接收数据。 父组件代码: <template&g…

vue交互实现

vue交互实现

Vue 交互实现方法 Vue.js 提供了多种方式实现用户交互,包括事件处理、表单绑定、动态渲染等。以下是常见的交互实现方法: 事件处理 通过 v-on 或 @ 指令绑定事件,触发方法或直接执行表达…

vue实现截图

vue实现截图

Vue 实现截图的方法 使用 html2canvas 库 安装 html2canvas 库: npm install html2canvas 在 Vue 组件中使用: import html2ca…

vue 实现级联

vue 实现级联

Vue 实现级联选择器 级联选择器(Cascader)常用于省市区选择、分类选择等场景。Vue 中可以通过 Element UI、Ant Design Vue 等 UI 库实现,也可以手动封装。 使…