当前位置: 首页 > news >正文

uniapp小程序怎么判断滑动的方向

项目场景:

获取手机上手指滑动的距离超过一定距离 来操作一些逻辑


解决方案:

在uniapp中,可以通过监听触摸事件来判断滑动的方向。常用的触摸事件包括touchstarttouchmove, 和 touchend。通过这些事件的参数,可以计算出用户的滑动起点和终点,进而判断滑动方向

touchStart 方法记录了触摸开始时的坐标,touchMove 方法在触摸移动时更新了坐标,touchEnd 方法则在触摸结束时计算出滑动的方向。getSwipeDirection 方法用于根据起点和终点的坐标判断出水平或垂直方向的滑动,如果水平方向的位移大于阈值,则判定为水平滑动;如果垂直方向的位移大于阈值,则判定为垂直滑动。

<template><view @touchstart="touchStart" @touchmove="touchMove" @touchend="touchEnd"><!-- 滑动区域内容 --><view v-for="(item,index) in 20" :key="index" style="border:1rpx solid #ccc;height:100rpx">测试11111</view></view>
</template><script>
export default {data() {return {startX: 0, // 触摸开始的X坐标startY: 0, // 触摸开始的Y坐标endX: 0,   // 触摸结束的X坐标endY: 0,   // 触摸结束的Y坐标};},methods: {touchStart(event) {this.startX = event.touches[0].pageX;this.startY = event.touches[0].pageY;},touchMove(event) {// 移动时更新结束坐标this.endX = event.touches[0].pageX;this.endY = event.touches[0].pageY;},touchEnd(event) {let direction = this.getSwipeDirection(this.startX, this.startY, this.endX, this.endY);console.log('Swipe direction: ' + direction);},getSwipeDirection(startX, startY, endX, endY) {const threshold = 30; // 设定一个阈值,用于判断是否是滑动const deltaX = endX - startX;const deltaY = endY - startY;// 如果水平方向的位移大于垂直方向,且水平方向的位移大于阈值,则认为是水平滑动if (Math.abs(deltaX) > Math.abs(deltaY) && Math.abs(deltaX) > threshold) {return deltaX > 0 ? 'right' : 'left';}// 如果垂直方向的位移大于水平方向,且垂直方向的位移大于阈值,则认为是垂直滑动else if (Math.abs(deltaY) > Math.abs(deltaX) && Math.abs(deltaY) > threshold) {return deltaY > 0 ? 'down' : 'up';}// 其他情况视为无效滑动return 'none';},},
};
</script>

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 手机FM LNA方案设计
  • java导出Excel接口
  • 恒润达生无商业化持续亏损,现金流连年为负募资超25亿
  • git进阶·团队开发的时候为何要创建临时分支来修复bug
  • 压缩大型语言模型 LLMs
  • 简单的棒棒图绘制教程
  • 【Android】最好用的网络库:Retrofit
  • wma格式怎么转换mp3?3个方法,一次解决音频转换烦恼
  • vrrp协议,主备路由器的选举
  • Webpack和Vite对比,Webpack会被Vite取代吗?
  • vue3+vite+ts如何使用路由
  • 点餐收银小程序
  • HTTP 一、基础知识
  • linux-squid代理服务器
  • 智慧能源系统解决方案(Doc)
  • IE9 : DOM Exception: INVALID_CHARACTER_ERR (5)
  • $translatePartialLoader加载失败及解决方式
  • 2017前端实习生面试总结
  • Django 博客开发教程 16 - 统计文章阅读量
  • es6要点
  • iOS仿今日头条、壁纸应用、筛选分类、三方微博、颜色填充等源码
  • magento 货币换算
  • Netty+SpringBoot+FastDFS+Html5实现聊天App(六)
  • Node项目之评分系统(二)- 数据库设计
  • PAT A1120
  • spring boot 整合mybatis 无法输出sql的问题
  • SSH 免密登录
  • 聊聊hikari连接池的leakDetectionThreshold
  • 如何使用 OAuth 2.0 将 LinkedIn 集成入 iOS 应用
  • 实战|智能家居行业移动应用性能分析
  • 通过git安装npm私有模块
  • 微服务入门【系列视频课程】
  • 因为阿里,他们成了“杭漂”
  • 用简单代码看卷积组块发展
  • mysql面试题分组并合并列
  • ​ubuntu下安装kvm虚拟机
  • ​软考-高级-信息系统项目管理师教程 第四版【第14章-项目沟通管理-思维导图】​
  • ‌前端列表展示1000条大量数据时,后端通常需要进行一定的处理。‌
  • #define与typedef区别
  • #pragma 指令
  • #使用清华镜像源 安装/更新 指定版本tensorflow
  • (2)从源码角度聊聊Jetpack Navigator的工作流程
  • (C语言)fgets与fputs函数详解
  • (done) ROC曲线 和 AUC值 分别是什么?
  • (php伪随机数生成)[GWCTF 2019]枯燥的抽奖
  • (SERIES12)DM性能优化
  • (附源码)计算机毕业设计SSM疫情居家隔离服务系统
  • (附源码)计算机毕业设计大学生兼职系统
  • (几何:六边形面积)编写程序,提示用户输入六边形的边长,然后显示它的面积。
  • (论文阅读26/100)Weakly-supervised learning with convolutional neural networks
  • (五)activiti-modeler 编辑器初步优化
  • (一)Kafka 安全之使用 SASL 进行身份验证 —— JAAS 配置、SASL 配置
  • (一)Thymeleaf用法——Thymeleaf简介
  • (原)记一次CentOS7 磁盘空间大小异常的解决过程
  • ****Linux下Mysql的安装和配置