当前位置:   article > 正文

vue video 播完第一个视频以后,再无缝衔接第二个视频并循环播放_vue-video-player实现多个视频循环播放

vue-video-player实现多个视频循环播放

这是一个项目中的实际需求,特此记录一下

思路:

  1. 页面中创建两个 video 标签
  2. 在组件加载时同时加载两个视频资源(autoplay),暂时不播放的视频在 canpl了解规则ay 事件中调用暂停方法,使之实现预加载
  3. 使用绝对定位将预加载的视频移出可视窗口
  4. 第一个视频结束后,通过 ended 事件播放之前预加载的视频 

核心代码:

模板:

  1. // :class 动态控制class展示
  2. <video ref="video" :class="{'video-hide':!playVideoTag}" @ended="onEnded('video')" autoplay="autoplay" muted="muted" src="./images/act220618/banner.mp4" class="banner-inner-video"></video>
  3. <video ref="video1" :class="{'video-hide':playVideoTag}" @ended="onEnded('video1')" autoplay="autoplay" muted="muted" src="https://res.hc-cdn.com/cpage-pep-custom-promotion/1.0.7/images/banner_video.mp4" class="banner-inner-video"></video>

data:

  1. data: function() {
  2. return {
  3. playVideoTag:true, // 是否ref video 准备播放
  4. ...
  5. }
  6. }

方法:

  1. // 播放video 相关
  2. onEnded: function(e) {
  3. // 改变playVideoTag 实则是改变了video的class 是否显示在可视区域
  4. this.playVideoTag = false
  5. // 第二个视频开始播放 即第一个视频播放完成后 开始播放第二个视频;
  6. // ... 第二个视频播放完毕时 调用该方法 再次播放 实现循环效果
  7. this.$refs.video1.play()
  8. this.$emit('ended')
  9. },
  10. playVideo: function() {
  11. this.$refs.video.play() // 第一个video 播放
  12. // 利用canplay事件 将第二个video暂停 实现预加载
  13. this.$refs.video1.addEventListener('canplay', function(e) {
  14. e.target.pause()
  15. }, { once: true })
  16. },
  17. // 播放video 相关 end
  1. mounted: function() {
  2. this.playVideo()
  3. }

CSS:

使用绝对定位将预加载的视频移出可视窗口

  1. .video-hide{
  2. position: absolute;
  3. top: -10000px !important;
  4. left: -10000px !important;
  5. }

成果:

 可以看到视频无缝切换,实现功能 (第二个视频会loop循环,由于gif大小限制未展示)

参考链接:

vue h5 video 多视频无缝切换

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/468847
推荐阅读
相关标签
  

闽ICP备14008679号