【项目】视频列表滑动,自动播放

news2024/11/23 10:33:14

自动播放

      • 期望效果,当滑动列表结束后,屏幕中间的视频自动播放
      • HTML页面
      • data变量
      • 实践操作!
      • 重点来了!
      • 滚动获得的数据
      • 实现效果
      • 源码(粘贴即可运行)

期望效果,当滑动列表结束后,屏幕中间的视频自动播放

HTML页面

  • 自动播放的实际就是上来展示的都是封面图
  • 当你通过你屏幕中间视频的索引改变
  • 通过v-if改变你的封面图,将你的视频拿出来重新渲染
  • 有的需要设置muted静音播放
<template>
	<view class="content">
		<div class="card" v-for="(item,index) in list" :key="index" :id="'cell'+index">
			<video class="videos" :show-play-btn='false' :muted='true' :autoplay="true" :data-isLeft='true' v-if="currentindex==index" src="http://source.picsrock.com/upload/solitaire/2022/12/10/3febdb5d-f92a-403c-a042-37d831aaaaa1.mp4"></video>
			<image v-else src="../static/logo.png" mode=""></image>
		</div>
	</view>
</template>

data变量

data() {
			return {
				list:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16],
				timer:"",
				duiListHeight:[],
				currentindex:0,//目的页面一进来,先播放第一个
			}
		},

实践操作!

  • 小程序中,你可以采用onPageScroll()监听页面滚动
  • 但注意的是,如果一边滚一边监听而去查数据,会造成数据的大量加载
  • 所以,采取定时器,时间可调节
//监听页面滚动
onPageScroll(e) {
	let sTop = e.scrollTop.toFixed(0); // 屏幕滑动距离
	let that = this
	clearTimeout(that.timer)
		that.timer = setTimeout(() => {
			//that.$refs.duiduipeng.changeCell(sTop)//当你操作的数据是子组件的数据的时候采用这个
			that.getRectInfo() //如果不是就直接采用页面数据
	}, 500)
},

重点来了!

  • 本次实践是在uniapp中,先在html中加上动态id名
  • 你需要上来获取你页面中所有的dom的节点信息,获取到他们的top值
  • 因为这个top值,就是节点距离屏幕顶端的距离
  • 你需要将他们存在新数组
  • 而你此时要做的就是,就是判断这个新数组中,位于屏幕中央的数组,我设置的是150-450这个范围
  • 然后将通过新数组的下标改变数据数组的下标的数据信息,从而让他自动播放
//自动播放视频
getRectInfo: function(list) {
	let that = this
	that.duiListHeight = []
		// 定位
		setTimeout(function() {
			for (let i = 0; i < that.duiList.length; i++) {
				var query = uni.createSelectorQuery().in(that);
				var nodeDef = query.select('#cell' + i);
				nodeDef.boundingClientRect((data) => {
					var tmpHeight = data;
					that.duiListHeight.push(tmpHeight.top)
					that.duiListHeight.forEach((item, index) => {
						if (item > 150 && item < 450) {
							that.currentindex= index
						}
					})
				}).exec();
			}
	}, 500)
},

滚动获得的数据

  • 再里面筛选出高度适合的范围数据
  • 在这里插入图片描述

实现效果

在这里插入图片描述

源码(粘贴即可运行)

  • 更换一个可以用的视频地址
<template>
	<view class="content">
		<div class="card" v-for="(item,index) in list" :key="index" :id="'cell'+index">
			<video class="videos" :show-play-btn='false' :muted='true' :autoplay="true" :data-isLeft='true' v-if="currentindex==index" src="http:/xxxxxx/3febdb5d-f92a-403c-a042-37d831aaaaa1.mp4"></video>
			<image v-else src="../static/logo.png" mode=""></image>
		</div>
	</view>
</template>

<script>
	export default {
		data() {
			return {
				list:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16],
				timer:"",
				duiListHeight:[],
				currentindex:0,
			}
		},
		onLoad() {

		},
		//监听页面滚动
		onPageScroll(e) {
			let sTop = e.scrollTop.toFixed(0); // 屏幕滑动距离
			let that = this
			clearTimeout(that.timer)
				that.timer = setTimeout(() => {
					//that.$refs.duiduipeng.changeCell(sTop)//当你操作的数据是子组件的数据的时候采用这个
					that.getRectInfo() //如果不是就直接采用页面数据
			}, 500)
		},
		methods: {
			scroll(e) {
				console.log(e, "列表数据")
			},
			// 重置 loadmore
			setSpecialEffects() {
				this.$refs["list"].setSpecialEffects({
					id: "scroller",
					headerHeight: 150
				});
			},
			clearSpecialEffects() {
				this.$refs["list"].setSpecialEffects({});
			},
			//自动播放视频
			getRectInfo: function(list) {
				let that = this
				that.duiListHeight = []
					// 定位
					setTimeout(function() {
						for (let i = 0; i < that.list.length; i++) {
							var query = uni.createSelectorQuery().in(that);
							var nodeDef = query.select('#cell' + i);
							nodeDef.boundingClientRect((data) => {
								var tmpHeight = data;
								that.duiListHeight.push(tmpHeight.top)
								console.log(that.duiListHeight)
								that.duiListHeight.forEach((item, index) => {
									if (item > 150 && item < 450) {
										that.currentindex = index
									}
								})
							}).exec();
						}
				}, 500)
			},
		}
	}
</script>

<style>
	.content{
	}
	.card {
		position: relative;
		overflow: hidden;
		transition-duration: 0.3s;
		margin-bottom: 10px;
		width: 200px;
		height: 100px;
		background-color: #ffaa00;
		content-visibility: auto;
	}
	.videos{
		width:100%;
		height: 100%;
	}
	image{
		width:100%;
		height: 100%;
	}
	.card:before {
		content: '';
		position: absolute;
		left: -665px;
		top: -460px;
		width: 300px;
		height: 15px;
		background-color: rgba(255, 255, 255, 0.5);
		transform: rotate(-45deg);
		animation: searchLights 2s ease-in 0s infinite;
	}

	@keyframes searchLights {
		0% {}

		75% {
			left: -100px;
			top: 0;
		}

		100% {
			left: 120px;
			top: 100px;
		}
	}
</style>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/433070.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C. Anna, Svyatoslav and Maps(floyd + 思维)

Problem - C - Codeforces 给你一个有n个顶点的无权图&#xff0c;以及由m个顶点的序列p1,p2,...,pm给出的路径&#xff08;该路径不一定简单&#xff09;&#xff1b;对于每个1≤i<m&#xff0c;有一个弧从pi到pi1。 如果v是p的子序列&#xff0c;v1p1&#xff0c;vkpm&a…

重学Java设计模式-行为型模式-命令模式

重学Java设计模式-行为型模式-命令模式 内容摘自&#xff1a;https://bugstack.cn/md/develop/design-pattern/2020-06-21-重学 Java 设计模式《实战命令模式》.html#重学-java-设计模式-实战命令模式「模拟高档餐厅八大菜系-小二点单厨师烹饪场景」 命令模式介绍 图片来自&a…

后端查询到数据,前端显示该数据为null

问题展示&#xff1a; 数据库可视化界面。我们要展示record属性里面的值。 前端form表单&#xff1a; 后端属性&#xff1a; 后端sql语句&#xff1a; 接下来我们查询订单详情&#xff0c;ID8的订单。 后端控制台&#xff1a; 我们明显的看到&#xff0c;record这个属…

CSS选择器进阶1.2

一&#xff0c;复合选择器 1.1后代选择器&#xff1a;Space 作用&#xff1a;根据HTML标签的嵌套关系&#xff0c;选择父元素后代中满足条件的元素。 选择器语法&#xff08;选择器1为父选择器&#xff0c;选择器2为后代选择器&#xff09;&#xff1a; 选择器1 选择器2{CSS…

【HTML5】HTML5 语义化标签 ( HTML5 简介 | 新增特性 | 语义化标签及代码示例 )

文章目录 一、HTML5 简介二、HTML5 语义化标签三、HTML5 语义化标签代码示例 一、HTML5 简介 HTML5 指的是 对 HTML 语言的第五次重大修改 , 新增了新的元素 / 属性 / 行为 ; HTML5 新增的特性 : 语义特性本地存储特性设备兼容特性连接特性网页多媒体特性三维特性图形及特效特…

故障重现, JAVA进程内存不够时突然挂掉模拟

背景&#xff0c;服务器上的一个JAVA服务进程突然挂掉&#xff0c;查看产生了崩溃日志&#xff0c;如下&#xff1a; # Set larger code cache with -XX:ReservedCodeCacheSize # This output file may be truncated or incomplete. # # Out of Memory Error (os_linux.cpp:26…

什么是跳表?

文章目录文章目的注意事项1.什么是跳表-skiplist2.skiplist的效率如何保证&#xff1f;2.1 一个节点的平均层数3. skiplist的实现文章目的 让你知道什么是跳表,梳理跳表跳表的设计思路及实现 注意事项 下面有数学公式,需要数学功底,只要弄清楚用来干嘛就行有兴趣的人可以了解…

FVCOM模型数值模拟流域、海洋水动力、水环境,解决水交换及污染物扩散问题、溢油及物质输运问题

目录 FVCOM流域、海洋水环境数值模拟方法及实践技术应用 第一章、FVCOM水动力相关理论 第二章、Linux系统下FVCOM运行环境搭建 第三章、FVCOM三维水动力数值模拟前处理 第四章、FVCOM三维水动力数值模拟 第五章、FVCOM三维水动力计算结果可视化及率定方法 第六章、FVCOM…

算法的空间复杂度

空间复杂度也是一个数学表达式&#xff0c;是对一个算法在运行过程中临时占用存储空间大小的量度 空间复杂度不是程序占用了多少bytes的空间&#xff0c;因为这个也没太大意义 所以空间复杂度算的是变量的个数 空间复杂度计算规则基本跟实践复杂度类似&#xff0c;也使用大O渐进…

Ajax详解

1、什么是Ajax ajax 全名 async javascript and XML是前后台交互的能力也就是我们客户端给服务端发送消息的工具&#xff0c;以及接受响应的工具是一个 默认异步 执行机制的功能。 2、 AJAX 的优势 不需要插件的支持&#xff0c;原生 js 就可以使用用户体验好&#xff08;不…

学生成绩管理系统的设计与实现

一、系统需求分析 实现对一个有32个学生的班级&#xff0c;每个学生有7门课程&#xff0c;实现对他们的班级成绩进行添加、修改、删除、查找、统计输出等基本信息进行一系列的操作。每个学生包括如下信息&#xff1a;学号、姓名、7门课程名称。 二、系统功能模块设计 主要包含…

zookeeper 搭建 linux

jdk安装 1.从网盘里下载jkd 2.创建安装目录&#xff0c;然后将jdk包解压到目录中 mkdir jdktar -zxvf jdk-8u271-linux-x64.tar.gz -C /home/ubuntu/app/jdk/ 3.设置环境变量 修改 vi /etc/profile, 在 profile 文件中添加如下内容并保存&#xff1a; set java environment JAV…

OpenAI-ChatGPT最新官方接口《AI绘图》全网最详细中英文实用指南和教程,助你零基础快速轻松掌握全新技术(三)(附源码)

ChatGPT-AI绘图 Image generation Beta 图片生成前言IntroductionUsageGenerationsEdits 编辑 VariationsLanguage-specific tips 特定语言提示Python 语言Using in-memory image data 使用内存中的图像数据Operating on image data 操作图像数据Error handling Node.js 语言Us…

手把手教你使用Python调用 ChatGPT!支持http代理

手把手教你使用Python调用 ChatGPT&#xff01;支持http代理 作者&#xff1a;虚坏叔叔 博客&#xff1a;https://xuhss.com 早餐店不会开到晚上&#xff0c;想吃的人早就来了&#xff01;&#x1f604; 前段时间OpenAI 开放了两个新模型的api接口&#xff0c;专门为聊天而生的…

《JavaEE初阶》多线程基础

《JavaEE初阶》多线程基础 文章目录《JavaEE初阶》多线程基础前言:多线程的概念简单创建线程并运行:简述Thread中run方法与start方法的区别创建线程的几种方法:探讨串行执行与并行执行的执行时间多线程的使用场景:Thread类简单介绍:构造方法:获取线程的常见属性:线程的常用方法…

Nacos 客户端服务发现源码分析-篇六

Nacos 客户端服务发现源码分析-篇六 &#x1f550;Nacos 客户端服务注册源码分析-篇一 &#x1f551;Nacos 客户端服务注册源码分析-篇二 &#x1f552;Nacos 客户端服务注册源码分析-篇三 &#x1f553;Nacos 服务端服务注册源码分析-篇四 &#x1f554;Nacos 服务端健康…

ChatGPT神器免费使用,告别昂贵低效工具

大家好&#xff0c;今天我要向大家介绍一款免费的ChatGPT使用网址&#xff0c;它可以让你轻松地使用ChatGPT进行AI创作&#xff01;而且&#xff0c;这个网址还是免费的&#xff0c;不需要担心会有额外的费用。 ChatGPT是一种非常强大的AI技术&#xff0c;可以用于各种领域&…

《PyTorch 深度学习实践》第11讲 卷积神经网络(高级篇)

文章目录 1 Inception Module1.1 11卷积1.2 Inception模块结构1.3 完整代码 2 残差网络(Residual Network) 该专栏内容为对该视频的学习记录&#xff1a;【《PyTorch深度学习实践》完结合集】 专栏的全部代码、数据集和课件全放在个人GitHub了&#xff0c;欢迎自取。 1 Incept…

数据库实验 | 第3关:建立和调用存储函数

任务描述 本关任务&#xff1a; 销售数据库有顾客、销售单数据表 顾客gk数据表有会员号hyh、姓名name、性别sex、电话tel、部门dept字段 销售单xsd数据表有销售单号xsdh、会员号hyh、雇员号gyh、销售日期xsrq、应付款yfk、实际付款sjfk字段 任务要求 建立存储过程 gkjb(nf …

Obsidian中如何创作思维导图Mind-map

使用插件 obsidian-mind-map 1.直接在社区下载安装 设置快捷键或者在左侧竖形打开命令面板搜索关键字“mind”&#xff0c; 或者为了便于使用&#xff0c;设置快捷键&#xff0c;在设置-第三方插件中-选择快捷键 然后按下你想设置的快捷键就可以 我这里设置成了CtrlAltM ,M是…