赞
踩
这是一个项目中的实际需求,特此记录一下
video
标签autoplay
),暂时不播放的视频在 canpl
了解规则ay
事件中调用暂停方法,使之实现预加载ended
事件播放之前预加载的视频 模板:
- // :class 动态控制class展示
- <video ref="video" :class="{'video-hide':!playVideoTag}" @ended="onEnded('video')" autoplay="autoplay" muted="muted" src="./images/act220618/banner.mp4" class="banner-inner-video"></video>
-
- <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:
- data: function() {
- return {
-
- playVideoTag:true, // 是否ref video 准备播放
- ...
- }
- }
方法:
- // 播放video 相关
- onEnded: function(e) {
- // 改变playVideoTag 实则是改变了video的class 是否显示在可视区域
- this.playVideoTag = false
- // 第二个视频开始播放 即第一个视频播放完成后 开始播放第二个视频;
- // ... 第二个视频播放完毕时 调用该方法 再次播放 实现循环效果
- this.$refs.video1.play()
- this.$emit('ended')
- },
- playVideo: function() {
- this.$refs.video.play() // 第一个video 播放
- // 利用canplay事件 将第二个video暂停 实现预加载
- this.$refs.video1.addEventListener('canplay', function(e) {
- e.target.pause()
- }, { once: true })
- },
-
- // 播放video 相关 end
- mounted: function() {
- this.playVideo()
- }
CSS:
使用绝对定位将预加载的视频移出可视窗口
- .video-hide{
- position: absolute;
- top: -10000px !important;
- left: -10000px !important;
- }
可以看到视频无缝切换,实现功能 (第二个视频会loop循环,由于gif大小限制未展示)
参考链接:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。