说实话,这玩意儿是真的恶心呀,前期看到uView实现了嵌套的轮播,结果自己试的时候发现只有在H5上面生效,视频可以显示并且播放,在app端完全是黑屏的状态,视频什么都看不到,轮播倒是实现了。网上搜索了很多资料,发现很多大佬都说在swiper中不能放置视频和图片嵌套,会和轮播的scroll属性冲突,产生一些无法理解的错误。

搜搜搜,作为初级CV工程师,就是要不断尝试,不断CV,搜索大量资料。最后找到了一种勉强合适的方式:轮播的时候使用视频的图片去轮播,多做一个判断,一旦发现是视频文件,就给他轮播视频的某个代表图片。利用点击事件点击图片进行视频播放。


<swiper class="screen-swiper" :hidden="!autoplay">
                    <swiper-item>
                        <video style="height: 95vh" id="myVideo" :src="videoUrl" autoplay="false" loop muted
                            show-play-btn controls objectFit="cover" @ended="close"></video>
                        <u-button text="返回" @click="close()"></u-button>
                    </swiper-item>
                </swiper>

                <swiper :hidden="autoplay" class="screen-swiper" indicator-dots="true" circular="true"
                    :autoplay="!autoplay" interval="3500" duration="500">
                    <swiper-item @tap="item.type == 'video' && BoFang(item.path) " v-for="item in ress">
                        <image v-if="item.type == 'image'" :src="item.path" mode="widthFix"></image>
                        <image v-else src="../../static/images/video1.jpg" mode="heightFix "></image>
                    </swiper-item>
</swiper>

方法:

// 播放视频
BoFang(val) {
	this.videoUrl = val
	if (this.autoplay == false) {
		this.autoplay = true;
	// this.videoContext.play();
	}
},
// 关闭视频
close() {
	if (this.autoplay == true) {
		this.autoplay = false
	}
}

样式代码:

.screen-swiper {
	min-height: 360upx;
}

.screen-swiper image,
.screen-swiper video {
	width: 100%;
	display: block;
	height: 100%;
	margin: 0;
	pointer-events: none;
}

 部分代码如上,接口数据获取到了就行。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐