当前位置:首页 > VUE

vue实现视频播放组件

2026-01-21 09:44:04VUE

实现基础视频播放组件

使用HTML5的<video>标签结合Vue的响应式数据绑定实现基础播放功能。

<template>
  <div class="video-player">
    <video 
      ref="videoPlayer"
      :src="videoSrc"
      @play="onPlay"
      @pause="onPause"
      @ended="onEnded"
      controls
    ></video>
    <div class="controls">
      <button @click="togglePlay">{{ isPlaying ? '暂停' : '播放' }}</button>
      <input type="range" v-model="progress" @input="seekVideo" />
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      videoSrc: 'https://example.com/sample.mp4',
      isPlaying: false,
      progress: 0
    };
  },
  methods: {
    togglePlay() {
      const video = this.$refs.videoPlayer;
      this.isPlaying ? video.pause() : video.play();
    },
    onPlay() {
      this.isPlaying = true;
    },
    onPause() {
      this.isPlaying = false;
    },
    onEnded() {
      this.isPlaying = false;
      this.progress = 0;
    },
    seekVideo(e) {
      const video = this.$refs.videoPlayer;
      const seekTime = (e.target.value / 100) * video.duration;
      video.currentTime = seekTime;
    }
  }
};
</script>

添加进度条实时更新

通过timeupdate事件监听播放进度,并更新进度条。

vue实现视频播放组件

mounted() {
  this.$refs.videoPlayer.addEventListener('timeupdate', this.updateProgress);
},
methods: {
  updateProgress() {
    const video = this.$refs.videoPlayer;
    this.progress = (video.currentTime / video.duration) * 100;
  }
}

支持自定义控件样式

通过CSS覆盖默认控件样式,隐藏原生控件并完全自定义UI。

<video ref="videoPlayer" :src="videoSrc" @click="togglePlay" class="custom-video"></video>
<style>
.custom-video {
  width: 100%;
  /* 隐藏原生控件 */
  &::-webkit-media-controls {
    display: none !important;
  }
}
.controls {
  background: rgba(0, 0, 0, 0.5);
  padding: 10px;
}
</style>

集成第三方播放器库(如Video.js)

通过Vue封装第三方库实现高级功能(如字幕、多清晰度切换)。

vue实现视频播放组件

  1. 安装依赖:
    npm install video.js @videojs-player/vue
  2. 组件封装:
    import { VideoJsPlayer } from '@videojs-player/vue';
    export default {
    components: { VideoJsPlayer },
    data() {
     return {
       options: {
         sources: [{
           src: 'https://example.com/video.mp4',
           type: 'video/mp4'
         }],
         controls: true,
         poster: 'https://example.com/poster.jpg'
       }
     };
    }
    };
    <template>
    <video-js-player :options="options" />
    </template>

响应式尺寸调整

通过CSS和Vue监听窗口大小变化,动态调整播放器尺寸。

data() {
  return {
    playerWidth: '800px'
  };
},
created() {
  window.addEventListener('resize', this.handleResize);
},
methods: {
  handleResize() {
    this.playerWidth = window.innerWidth < 768 ? '100%' : '800px';
  }
}
<video :style="{ width: playerWidth }"></video>

跨浏览器兼容性处理

针对不同浏览器添加多种视频格式源。

<video controls>
  <source src="video.mp4" type="video/mp4">
  <source src="video.webm" type="video/webm">
  <p>您的浏览器不支持HTML5视频</p>
</video>

性能优化

  • 使用preload="metadata"减少初始加载时间
  • 实现懒加载:通过Intersection ObserverAPI在视频进入视口时加载
    mounted() {
    const observer = new IntersectionObserver((entries) => {
      if (entries[0].isIntersecting) {
        this.loadVideo();
        observer.unobserve(this.$el);
      }
    });
    observer.observe(this.$el);
    }

分享给朋友:

相关文章

vue实现折叠组件

vue实现折叠组件

Vue 折叠组件实现方法 基于 v-show 和事件触发 通过 v-show 控制内容的显示与隐藏,结合点击事件切换状态。 <template> <div>…

vue哪个组件实现动画

vue哪个组件实现动画

在Vue中实现动画效果,可以通过以下组件和方法实现: Vue内置动画组件 Vue提供了<transition>和<transition-group>两个内置组件,用于处理进入…

vue怎么实现组件缓存

vue怎么实现组件缓存

vue实现组件缓存的方法 在Vue中实现组件缓存可以通过内置的<keep-alive>组件完成,该组件能够缓存不活动的组件实例,避免重复渲染。 使用<keep-alive>基…

vue实现组件循环图片

vue实现组件循环图片

Vue 实现组件循环图片的方法 在 Vue 中实现组件循环图片通常可以通过 v-for 指令结合动态数据绑定完成。以下是几种常见的实现方式: 使用静态图片路径数组 假设有一组本地图片路径,可以通过数…

uniapp倒计时组件

uniapp倒计时组件

uniapp倒计时组件实现方法 使用内置组件实现 uniapp提供了<countdown>组件用于倒计时功能,支持自定义格式和样式。示例代码如下: <countdown…

uniapp如何将底部导航组件化

uniapp如何将底部导航组件化

在 uniapp 中将底部导航组件化 将底部导航组件化可以提高代码复用性和维护性。以下是具体实现方法: 创建自定义底部导航组件 新建一个组件文件,例如 tab-bar.vue,放置在 comp…