uniapp-app的视频轮播图

这篇具有很好参考价值的文章主要介绍了uniapp-app的视频轮播图。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

直接使用swiper做图片轮播图是没有问题的,视频轮播图的兼容性仅仅体现在APP上。

我的方法是将nvue页面作为视频的遮罩层,如果直接将视频放到nvue页面,说不定也可以。其实这个兼容性的关键在于video标签在手机上的层级过高,除了nvue,还有其他方法解决。

因为我的这个项目是图片,视频混合的轮播图,所以很多地方要判断,是否为视频,但测试时,第一项就是视频,所以很多地方判断,swiper的current是否为0。

pages/my/person.vue

<view class="person-head">
	<swiper :current="swiperNum" @change="switchItem" circular indicator-dots 
         v-if="isVideo">
	    <!-- v-for循环遍历数组 -->
		<swiper-item v-for="item in list4">
			<image :src="item.url"></image>
		</swiper-item>
	</swiper>
	<view  v-if="!isVideo">
		<video id="myVideo" src="https://cdn.uviewui.com/uview/resources/video.mp4" 
         autoplay="true" style="width: 100%;height: 442rpx;" :controls="false" 
         :enable-progress-gesture="false">
        </video>
	</view>
</view>

//因为nvue层级很高,如果页面很长,能上下滑动。那nvue还是始终定在屏幕上方,
//用@touchend监听手指滑动,获得这个元素距离屏幕顶端的距离,以此让nvue高度变化。
<view class="person-body" @touchend="log" id="demo">
</view>

//<script>
    //在这里定义,因为很多地方都用到了。获取nvue页面
    const subNvue = uni.getSubNVueById('popup'); //获取
	//export default {


list4: [{
	url: 'https://cdn.uviewui.com/uview/swiper/swiper2.png',
	title: '身无彩凤双飞翼,心有灵犀一点通'
	}, {
	url: 'https://cdn.uviewui.com/uview/swiper/swiper3.png',
	title: '谁念西风独自凉,萧萧黄叶闭疏窗,沉思往事立残阳'
	}, {
	url: 'https://cdn.uviewui.com/uview/swiper/swiper1.png',
	title: 'image'
}],
isVideo: true,
swiperNum: 0,


onLoad(e) {

	// 监听事件  ,监听nvue页面传过来的
	uni.$on('getNvue', (direction) => {
			//因为一旦监听这个事件,代表在左右滑动(切换轮播),所以让视频和遮罩层隐藏
            //因为这里只有第一个是视频,实际要根据情况
			this.isVideo = true
			subNvue.hide()
            //根据是左滑,还是右滑,切换轮播图
			if (direction.elePosition == "left") {
				if (this.swiperNum >= this.list4.length - 1) {
					this.swiperNum = 0
				    console.log(this.swiperNum)
				} else {
					this.swiperNum += 1
					console.log(this.swiperNum)
				}

			} else if (direction.elePosition == "right") {
				if (this.swiperNum <= 0) {
					this.swiperNum = this.list4.length - 1
				} else {
					this.swiperNum -= 1
				}
			}

		})
	},
	onUnload() {
		//要在页面关闭的时候, 移除监听事件 ,隐藏遮罩层 
		uni.$off('getNvue');
		subNvue.hide()
	},
	onShow() {
		// 因为这里只有第一条是视频,所以检测swiper的页数是0时, 显示nvue页面
        //要根据实际情况判断
		if (this.swiperNum == 0) {
			subNvue.show() // 显示
		}

		// 因为switchItem事件,是轮播图切换时才会触发,这里考虑到第一个是视频的情况
		this.$nextTick(() => {
			this.switchItem()
			console.log(222)
		})
	},

	methods: {
       //获得元素距离屏幕顶端的距离,计算nvue需要移动的距离,通过setStyle方法移动
       log(e) {
			setTimeout(() => {
				let query = uni.createSelectorQuery().in(this);
				query.select('#demo').boundingClientRect(data => {
					console.log('元素距离顶部的距离' + data.top)
					let top = data.top>=0&&data.top<=212? 0-Math.trunc(212- 
                    data.top):-282
					const subNvue = uni.getSubNVueById('popup'); //获取
					subNvue.setStyle({"top": top+'px'})
				}).exec();
			}, 300)

		},

		//轮播图切换
		switchItem(obj) {
			console.log(obj)
			// 因为测试的数据第一项是视频,所以这里是0
			if (obj == undefined || obj.detail.current == 0) {
				subNvue.show()
				this.isVideo = false
				this.swiperNum = 0 //这个也要改成视频的index
			} else {
				this.isVideo = true
			}
			console.log(this.swiperNum)
  		},
    }


    .person-head {
		height: 500rpx;
		background-color: #000;
	}

 这是person页面轮播图视频部分的遮罩层(这个页面是透明的,可以设置背景色,方便调试)。
 因为直接用swiper轮播视频,两者底层逻辑之间有bug,h5端运行没问题,但真机测试有很多 
 bug,兼容性问题。
    
 bug之一,video的层级太高,导致视频,左右滑动触发不了swiper的切换。
 且video标签检测不到@touchstart,@touchstart等事件,也就判断不了左右滑动。

    
  解决:nvue(只有在手机上nvue才有效果)的层级比video还高,
  用nvue给video做遮罩层,监测在遮罩层上的滑动方向,判断左滑右滑,以此修改轮播图的页数

pages/my/subNVue/video.nvue

<template>
	<view id="popup">
		<view class="mask" @click="log" @touchstart="touchStart" @touchend="touchEnd">
			
		</view>
	</view>
</template>

<script>
	
	export default {
		data() {
			return {
				startTime: 0,
				startPosition: 0,
				endPosition: 0,
			}
		},
		methods: {
			
			// 起点
			touchStart(event) {
				this.startTime = Date.now()
				this.startPosition = event.changedTouches[0].screenX
			},
			// 终点,计算移动距离
			touchEnd(event) {
				
				const endTime = Date.now()
				if (endTime - this.startTime > 2000) {
					return;
				}
				this.endPosition = event.changedTouches[0].screenX
			
				//当移动距离超过10时判断左滑右滑。
				if (Math.abs(this.endPosition - this.startPosition) > 10) {
					this.endPosition = event.changedTouches[0].screenX
					var elePosition = this.endPosition - this.startPosition > 0 ? "right" : "left"
				} else {
					return;
				}
			
                //将左滑还是右滑,传到父页面
				console.log(elePosition)
				uni.$emit('getNvue', {elePosition:elePosition});
			},
		}
	}
</script>

<style scoped lang="scss">
	.mask {
		position: relative;
		width: 750rpx;
		height: 440rpx;
		background: rgba(0,0,0,0);
	}
</style>

pages.json

添加subNVues,id名要和nvue最外层的view标签的id保持一致。文章来源地址https://www.toymoban.com/news/detail-410139.html

{
	"path": "pages/my/person",
	"style": {
		"navigationBarTitleText": "个人主页",
		"app-plus": {
			"subNVues": [{
				"id": "popup", // 唯一标识  
				"path": "pages/my/subNVue/video", // 页面路径  
				//"type": "popup",  //原生子窗口内置样式,可取值:'popup',弹出 
                //层;"navigationBar",导航栏
					style": {
					"position":"absolute",
					"height": "442rpx",
                   //只能用transparent使nvue页面透明,其他方法会有bug
                   //测试时可以改为其他颜色,方便观察
					"background": "transparent"  
				}
			}],
			"scrollIndicator": "none",
			"bounce": "none",
			"backgroundColor": "#FFFFFF",
			"titleNView": false
		},
		"enablePullDownRefresh": false
	}
},

到了这里,关于uniapp-app的视频轮播图的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 在vue中使用swiper轮播图(搭配watch和$nextTick())

    在组件中使用轮播图展示图片信息: 1.下载swiper,5版本为稳定版本 cnpm install swiper@5 2.在组件中引入swiper包和对应样式,若多组件使用swiper,可以把swiper引入到main.js入口文件中: import \\\'swiper/css/swiper.css\\\' //引入swiper样式 import Swiper from \\\'swiper\\\'; //引入swiper  3.在组件中使用: 由于我

    2024年02月13日
    浏览(46)
  • uniapp-app视频层级过高问题

    使用v-html动态渲染 参考:uniapp video app端层级过高的问题,滑动渲染问题。_video在app端层级过高-CSDN博客 有想过使用原生,但是太麻烦了,然后换成了弹窗播放,但是动态的src播放失败,错误提示: chunk-vendors.js:14882 Uncaught (in promise) DOMException: The element has no supported sources.  

    2024年01月21日
    浏览(73)
  • 解决微信小程序swiper轮播图撑不满有留白 实现swiper轮播图撑满父容器

    问题 :如下图,swiper轮播图两侧会有留白,没有撑满swiper 失败的尝试 : 1.调整图片尺寸 2.设属性设置image的mode为scaleToFill 3.设置item的属性 都没能实现将图片填充满轮播图,图片会有右侧和底部两块留白 通过调试器查看到image区域很小,怀疑是image本身属性的问题 随后尝试在

    2024年04月25日
    浏览(59)
  • Swiper轮播图后端接口实现

    2024年01月25日
    浏览(50)
  • ❤️创意网页:打造简洁美观的网页轮播图(HTML简单实现轮播图)操作简单可以直接使用

    ✨ 博主: 命运之光 🌸 专栏: Python星辰秘典 🐳 专栏: web开发(简单好用又好看) ❤️ 专栏: Java经典程序设计 ☀️ 博主的其他文章: 点击进入博主的主页 前言: 欢迎踏入我的Web项目专栏,一段神奇而令人陶醉的数字世界! 🌌 在这里,我将带您穿越时空,揭开属于

    2024年02月17日
    浏览(48)
  • 微信小程序swiper实现层叠轮播图

    在微信小程序中,需要实现展示5个,横向层叠的轮播图效果,轮播图由中间到2侧的依次缩小.如下图 使用原生小程序进行开发,没有使用Skyline模式,所以layout-type配置项也无效。所以基于swiper组件进行调整。 主要思路就是设置不同的样式,根据当前激活的项,来动态切换样式。

    2024年01月24日
    浏览(60)
  • JS常用插件 Swiper插件 实现轮播图

    Swiper 是一款免费以及轻量级的移动设备触控滑块的js框架 中文官网地址: https://www.swiper.com.cn/ 点击查看 Swiper演示 ,里面的功能和样式十分丰富,根据自己的需求选择 中文教程 中详细介绍了如何使用Swiper API文档 中介绍了各个模块以及参数的详细信息,遇到不明白的参数可以

    2024年02月01日
    浏览(65)
  • Vue2+swiper基础实现轮播图

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 swiper的基础使用 提示:以下是本篇文章正文内容,下面案例可供参考 Swiper中文网-轮播图幻灯片js插件,H5页面前端开发         注意:我们用的是vue2所以推荐大家下载swiper5版本 示例: 查看安装是否完成

    2024年01月16日
    浏览(78)
  • uni-app 轮播图视频+图片 视频图片全屏预览 两种方法

    在做商城项目的时候,商品详情的轮播图需要同时显示视频和图片,并且能够全局预览 如果项目里有uview这个组件库,可以通过swiper轮播图的指定类型进行解决,点击这里进行跳转 也可以通过uni-app自带的swiper去解决这个问题,点击这里进行跳转 就目前的两种方案,第二种方

    2024年02月12日
    浏览(110)
  • uniapp使用swiper组件实现3D轮播效果

    使用uniapp 中的 swiper组件实现一个3D轮播图 关键属性: 1. circular: 采用衔接滑动 2.previous-margin: 前边距,用于露出前一项的一小部分 3.next-margin: 后边距,用于露出后一项的一小部分 效果图:     实现代码:(vue3)

    2024年02月15日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包