uniapp播放视频解决:同时播放、不可视区域播放

uniapp播放视频实现的组件为video

1.避免同时播放

<video v-for="(item,index) in trailer" :key="index" 
			class="Trailer" :data-id="item.id" :src="item.src" 
			@play="playing" :id="item.id">
</video>
<script>
	let that = null;
	export default {
		data() {
			return {
				windowWidth: '',
				windowHeight:'',
				trailer: [{
					"id": '12',
					"src": "https://codemaster-teaching-material.codemao.cn/1625546912491G6-P21.2(0519).mp4"
				},{
					"id": '45',
					"src": "https://codemaster-teaching-material.codemao.cn/1625546956268G6-P21.3(0519).mp4"
				},{
					"id": '78',
					"src": "https://codemaster-teaching-material.codemao.cn/1625552437104G6-P21.4(0517).mp4"
				},
				{
					"id": '90',
					"src": "https://codemaster-teaching-material.codemao.cn/1625552437104G6-P21.4(0517).mp4"
				},
				{
					"id": '92',
					"src": "https://codemaster-teaching-material.codemao.cn/1625552437104G6-P21.4(0517).mp4"
				},
				]
			};
		},
    methods: {
        Init() {
				uni.getSystemInfo({
					success: function(res) {
						this.windowWidth = res.windowWidth;
						this.windowHeight = res.windowHeight;
						console.log(this.windowHeight)
						},
				})
		},
        playing(e) {
				console.log(e)
				let currentId = e.currentTarget.dataset.id
				        // uni.createVideoContext获取视频上下文对象
				        this.videoContent = uni.createVideoContext(currentId)
						console.log(currentId)
				        // 获取json对象并遍历, 停止非当前视频
				        let trailer = this.trailer
				        for (let i = 0; i < trailer.length; i++) {
				          let temp = trailer[i].id
				          if (temp !== currentId) {
				            uni.createVideoContext(temp).pause()
				          }
				        }
			}
    }
</script>

2.不可视区域停止播放视频

生命周期里有一个onPageScroll(),监听页面的滑动。

里面有一个关于uview的getRect()函数,详细看网页资料:getRect 节点布局信息 | uView 2.0 - 全面兼容nvue的uni-app生态框架 - uni-app UI框架

onPageScroll() {
			var that = this;
			// console.log(that)
			this.$u.getRect('.' + "Trailer",true).then(rect => {
				console.log(rect)
				let a = rect
				for (let i = 0; i < a.length; i++) {
					// 判断top数值 向上滑动,不可视时暂停播放
					if (a[i].top <= 0) {
						console.log(a[i].dataset.id)
						uni.createVideoContext(a[i].dataset.id).pause()
					}
					// 向下滑动,不可视时暂停播放
					else if (a[i].top > this.windowHeight) {
						// console.log(this.windowHeight)
						// console.log(a[i].dataset.id)
						uni.createVideoContext(a[i].dataset.id).pause()
					}
				}
			})
},
methods: {
			Init() {
				uni.getSystemInfo({
					success: function(res) {
						this.windowWidth = res.windowWidth;
						this.windowHeight = res.windowHeight;
						console.log(this.windowHeight)
						},
					})
			},
」

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值