微信小程序——监听页面滑动(二)判断用户在做向上滑动还是向下滑动(onScrollPage scroll-view)

news/2024/7/20 3:26:02 标签: 微信小程序, 小程序, 前端

手把手教你学会判断用户在做向上滑动还是向下滑动

  • 知识回调(不懂就看这儿!)
  • 场景复现
  • 核心干货
    • onPageScroll结合scrollTop实现
    • 了解touch方法

知识回调(不懂就看这儿!)

知识专栏专栏链接
小程序>微信小程序专栏https://blog.csdn.net/xsl_hr/category_12338067.html?spm=1001.2014.3001.5482
Git版本管理https://blog.csdn.net/XSL_HR/article/details/130986889?spm=1001.2014.3001.5501
监听页面滑动https://blog.csdn.net/XSL_HR/article/details/130986889?spm=1001.2014.3001.5501

有关小程序>微信小程序的相关知识可以前往小程序>微信小程序官方文档查看了解!!

小程序>微信小程序官方文档传送门

场景复现

在上期文章中,我们简单介绍了如何监听页面滑动,但是在文章的最后留下了一个问题。我们如何判断用户是在做上滑操作还是下滑操作?本期文章将用两种方法(onPageScroll或者touchstart、touchmove、touchend)解决这个问题。

监听效果:
在这里插入图片描述
我们能发现,监听之后,上滑控制台会打印“上滑”,下滑控制台会显示“下滑”。

核心干货

onPageScroll结合scrollTop实现

在上期文章中,关于onPageScroll的用法已经介绍的很全面了。这里的话就直接写逻辑层的内容。
首先我们能监听页面变化的参数只有scrollTop,所以我们需要从scrollTop的变化下手。在上期文章中,我们发现当页面上滑时scrollTop递增,页面下滑时scrollTop递减。所以我们可以通过判断scrollTop的变化来判断用户的动作。

data:{
	scrollTopArr:<number[]>[]
}
onPageScroll: function(e) {
    var that = this
    var scrollTop = e.scrollTop;
    var scrollTopArr = that.data.scrollTopArr;
    scrollTopArr.push(scrollTop)
    var len = scrollTopArr.length;
    len > 5 ? scrollTopArr.slice(0,len-4):scrollTopArr;
    if(scrollTopArr[len-1] > scrollTopArr[len-2]){
      console.log("上滑")
    } else if(scrollTopArr[len-1] < scrollTopArr[len-2]) {
      console.log("下滑")
    }

现在理一下逻辑,由于onPageScroll是实时调用执行的,所以我们需要对每次获取到的数据进行存储,所以有了第一部分的data代码,首先定义一个数组用来存放每次调用的scrollTop。但是我们需要考虑到,这个函数调用是非常频繁的,所以一次的数据会有几百上千和数据,因此我们在做数据比较的时候,需要对代码进行截取,所以有了代码截取的部分。

在这里插入图片描述
上滑和下滑的监听都实现了。下面我们简单介绍一下第二种方法。

了解touch方法

小程序>微信小程序中可以通过监听touchstarttouchmovetouchend事件来判断用户的滑动方向。

具体方法如下:

  1. touchstart事件中记录下手指触摸的位置startY

  2. touchmove事件中记录下手指移动的位置moveY

  3. touchend事件中比较startYmoveY的大小,如果moveYstartY大,则用户是在向上滑动,反之则是向下滑动。

以下是示例代码:

let startY = 0;

// 监听touchstart事件
function handleTouchStart(e) {
  startY = e.touches[0].clientY;
}

// 监听touchmove事件
function handleTouchMove(e) {
  const moveY = e.touches[0].clientY;
  const direction = moveY > startY ? 'up' : 'down';
  console.log(`用户正在向${direction}滑动`);
}

// 监听touchend事件
function handleTouchEnd(e) {
  const moveY = e.changedTouches[0].clientY;
  const direction = moveY > startY ? 'up' : 'down';
  console.log(`用户向${direction}滑动结束`);
}

// 绑定事件
const element = document.querySelector('.scrollable-element');
element.addEventListener('touchstart', handleTouchStart);
element.addEventListener('touchmove', handleTouchMove);
element.addEventListener('touchend', handleTouchEnd);

在上面的代码中,我们通过handleTouchStarthandleTouchMovehandleTouchEnd函数分别处理touchstarttouchmovetouchend事件,并在handleTouchMovehandleTouchEnd函数中判断用户的滑动方向。最后,我们通过addEventListener函数将这些事件绑定到一个可滚动的元素上。

但是!!!!这个方法是有缺陷的,不过缺陷不大。touch方法只有在用户触摸的时候才会调用,否则是无效的。不过在现实操作中,用户是必须触摸的。只不过在开发者工具里面,我们是可以用鼠标滚轮滑动模拟滑动的,所以在使用touch后,我们需要点击触摸滑动才能在开发者工具上进行调试。


以上就是关于小程序>微信小程序监听用户上下滑行为的基础知识分享,相信看完这篇文章的小伙伴们一定能运用这些方法在项目开发中。当然,可能有不足的地方,欢迎大家在评论区留言指正!

下期文章将介绍小程序>微信小程序页面滑动之监听上下滑动~
感兴趣的小伙伴可以订阅本专栏,方便后续了解学习~
觉得这篇文章有用的小伙伴们可以点赞➕收藏➕关注哦~

在这里插入图片描述


http://www.niftyadmin.cn/n/384738.html

相关文章

【C语言进阶笔记】

文章目录 1. const&#xff08;常量指针、指针常量&#xff09;2. static3. extern4. 指针数组和数组指针5. 结构体对齐6. int / uint取值范围、二进制形式与转换、负数表示7. \0&#xff0c;0&#xff0c;"0"&#xff0c;0之间的区别8. 类型自动转换9. 内存结构10. …

打跑个人开源转角的“拦路虎”——我的开源之路

从参与Apache 开源项目&#xff0c;到凭借业务需求独自开发个人开源项目&#xff1b;从项目开源出来无人问津到至今500star&#xff0c;多个企业级用户&#xff0c;在开源过程中&#xff0c;我也从走过低谷&#xff0c;一度想过放弃&#xff0c;但仍然选择坚持至今日。 这一路…

薪酬板块工作笔记

文章目录 写在前面流程优化想法考勤原表优化邮件读取优化展望&#xff08;白日梦&#xff09; 写在前面 很棒&#xff0c;能接触薪酬板块的工作了&#xff0c;下午会交接&#xff0c;大约持续一周的工作内容 这篇会记录我的实际工作内容&#xff0c;并记录一些心得 流程 钉…

R数据分析:多项式回归与响应面分析的理解与实操

今天给大家分享一个新的统计方法&#xff0c;叫做响应面分析&#xff0c;响应面分析是用来探究变量一致性假设的&#xff08;Congruence hypotheses&#xff09;。本身是一个工程学方法&#xff0c;目前在组织行为学&#xff0c;管理&#xff0c;市场营销等等领域中使用越来越多…

京东国际销售数据查询(京东国际行业/品牌数据分析)

根据京东平台官方数据显示&#xff0c;今年京东国际的贡献力度也高于以往。 京东618开门红5分钟&#xff0c;京东国际成交额已突破去年开门红前两小时的成交额&#xff0c;跨境酒水、跨境手机通讯、跨境箱包皮具等3个品类成交额同比增长超100%。&#xff0c;开门5分钟&#xff…

Spring Boot如何实现微服务架构中的API网关?

Spring Boot如何实现微服务架构中的API网关&#xff1f; 随着微服务架构的流行&#xff0c;越来越多的企业开始构建自己的微服务系统。在这种情况下&#xff0c;API网关变得尤为重要。API网关是微服务架构中的一个组件&#xff0c;它可以帮助我们管理和路由所有的API请求。Spr…

Nginx服务基础、访问控制、虚拟主机

Nginx服务基础、访问控制、虚拟主机 关于Nginx一、编译安装Nginx服务1、关闭防火墙&#xff0c;将安装nginx所需软件包传到/opt目录下2、安装依赖包3、创建运行用户、组4、编译安装Nginx5、检查、启动、重启、停止 nginx服务6、添加 Nginx 系统服务 二、认识Nginx服务的主配置文…

机器学习 监督学习 Week3

Logistic Regression 一个用于分类的算法&#xff0c;模型拟合后&#xff0c;以某些值作为阈值&#xff0c;将数据区分为不同的类别。过去的回归算法中&#xff0c;y的值可以范围很广&#xff0c;而在分类算法中y代表类别&#xff0c;往往只有几个&#xff0c;甚至只有两个(tru…