提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
需求
要求做附件预览,可以预览图片文件和视频文件。
一.遇到问题?
视频文件一旦播放切换swiper轮播图到下一张,上一个的视频还是会保持播放状态,并且有视频播放的声音,严重影响使用
二.渲染图片和视频
1.首先判断附件是否是视频文件和图片文件,如果不是就显示附件不支持预览
代码如下(示例):
// 图片得样式
let imgTypes = 'jpg,jpeg,png,gif,svg';
// 视频的样式
let videoTypes = 'mp4,wav,avi,ram,rmvb,mpg,flv,mov';
this.imgList = this.list.map(item => {
// 拿到当前文件后缀名,如果不是图片提示不支持预览
let suffix = item.split('?')[0].split('.')[item.split('?')[0].split('.').length - 1];
// 判断是否是视频文件
if (videoTypes.indexOf(suffix) > -1) {
item += '`yes-video';
return item;
}
// 判断是否是图片文件
if (imgTypes.indexOf(suffix) == -1) {
item += '`no-img';
}
return item;
});
2.html代码部分
三.解决切换视频时候暂停的问题
1.动态绑定ref
2.通过监听swipier的切换回调函数配合动态ref 来获取dom,并且判断dom是否是视频 如果是视频调用video的原生api 暂停视频
// 分页器配置
pagination: {
el: '.swiper-pagination',
clickable: true,
type: 'bullets',
currentClass: 'pagination-active', //分式类型分页器的当前索引的类名
},
navigation: {
nextEl: '.swiper-button-next',
prevEl: '.swiper-button-prev',
},
on: {
// 切换的时候如果是视频那么需要暂停视频
slideChangeTransitionStart: swiper => {
// 通过ref拿到切换前一个的demo
let dom = this.$refs['card' + this.lastIndex][0];
// 判断dom是否是video,如果是调用video暂停api
dom && dom.pause && dom.pause();
this.lastIndex = swiper.activeIndex;
},
},