微信小程序—页面滑动,获取可视区域数据

需求:页面有一列表,获取可视区域的数据;滑动过程中不处理,停止滑动后才获取。

实现原理:获取列表中每个条目的位置信息(元素顶部距可视区域顶部的距离),和可视区域比较,在可视范围内即认为可视元素

如下简单html结构
javascript 复制代码
//列表
<view class="list">
	// 每个条目
	<view class="item" wx:for={{ data }} data-id={{ item.id }}>{{ item.name }}</view>
</view>
js方法
  • 如果不需要判断是否滑动,则在onPageScroll中直接执行getVisibleItems方法即可
最终得到的visibleItems即为可视区域的数据,是一个数组,可通过每个元素的dataset获取绑定在元素上的字段,如上述html中的字段id
javascript 复制代码
Page({
	//....其他逻辑
	let scrollTimer = null  //定义一个全局的滑动定时器 用来判断是否正在滑动,如果不需要判断是否滑动,则在onPageScroll中直接执行getVisibleItems方法即可
	//页面滑动监听方法
	onPageScroll: function (e) {
		//一直滑动 一直清楚 直到滑动停止1s后,执行获取方法
		if(scrollTimer){
	      clearTimeout(scrollTimer)
	    }
	    // 赋值延迟方法 停止滑动后执行
	    scrollTimer = setTimeout(() => {
	      this.getVisibleItems()
	    }, 1000);
	},
	getVisibleItems(){
		//创建一个选择器
		const query = wx.createSelectorQuery().in(this);
		//获取列表内所有条目元素 在界面的位置信息
	    query.selectAll('.item').boundingClientRect();
	    query.selectViewport().scrollOffset();
	    query.exec((res) => {
	      //所有选中的条目数据
	      const listItemRects = res[0];
	      //获取设备的视口高度 (如果有底导航其他固定底部的元素可在此减去其高度)
	      const viewportHeight = wx.getSystemInfoSync().windowHeight;
	      // 获取可见的列表项
	      const visibleItems = listItemRects.filter(rect => {
	      	//元素局顶部的距离 (如果顶部有固定的tab或导航栏可在此减去其高度)
	        console.log(rect.top) 
	        console.log(viewportHeight)
	        // 元素距离顶部的距离在此范围内 即认为在可视范围内
	        return rect.top && rect.top < viewportHeight;
	      })
	      //visibleItems即为可视区域的数据,是一个数组,可通过dataset获取绑定在元素上的字段,如上述html中的字段id
	      //可做后续逻辑处理
	    })
	},
})
相关推荐
zhiboshequ13 小时前
Ai音视频对话在微信小程序端的技术实现方案
人工智能·微信小程序·live-pusher·live-player·音视频对话
小蒜学长14 小时前
基于过程性评价的ai助学平台(代码+数据库+LW)
java·spring boot·后端·微信小程序·过程性评价
00后程序员张17 小时前
无需 Mac 的 iOS App 上架工具,开心上架Appuploader 负责哪些环节
android·ios·小程序·https·uni-app·iphone·webview
2501_915909061 天前
Ipa Guard 防护上架,混淆、重签名和回归测试怎么做
android·ios·小程序·https·uni-app·iphone·webview
鸿蒙开发2 天前
# 代码写完才发现不能上线:微信小程序开发前必须准备的 8 件事
微信小程序·产品经理
李纲明2 天前
微信小程序 web-view 打开空白或提示未配置业务域名:校验文件、HTTPS 与跳转域名排查
前端·微信小程序·https·web-view·小程序开发·业务域名
济南壹软网络科技有限公司2 天前
盲盒源码系统小程序V6MAX底层架构解析,PHP+Uniapp高性能商用底座发布
小程序·架构·uni-app
2501_915918412 天前
iOS 上架注意事项有哪些?Appuploader 的四个阶段自查清单
android·ios·小程序·https·uni-app·iphone·webview
Autumn_ing2 天前
AI原型设计工具怎么选?可编辑原型与可运行前端适合什么场景
前端·小程序·产品经理·代码·codex·墨刀ai客户端·ai原型
fengGer的bugs2 天前
微信小程序实战:本地存储的新生儿喂养记录(原生 + 四套主题 + 疫苗日程)
微信小程序·小程序