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

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>


http://www.kler.cn/a/283146.html

相关文章:

  • 事件循环 -- 资源总结(浏览器进程模型、事件循环机制、练习题)
  • 尽量通俗易懂地概述.Net U nity跨语言/跨平台相关知识
  • nginx部署H5端程序与PC端进行区分及代理多个项目及H5内页面刷新出现404问题。
  • 分享一个傻瓜式一键启动的加速器
  • Spark 的容错机制:保障数据处理的稳定性与高效性
  • node.js安装和配置教程
  • Redis—基础篇
  • 如何让大模型学会自我反思
  • VMware安装Ubuntu 23.10.1系统图文版
  • Yolo环境搭建(深度学习基础环境)
  • 在Docker中,本地的镜像文件都存放在哪里?
  • 数据安全守护者:精通数据备份与恢复的艺术
  • 优化大型语言模型微调:MoLA层级专家分配策略
  • CSS3 3D 转换
  • HarmonyOS鸿蒙开发( Beta5版)Navigation组件常规加载与动态加载
  • Ubuntu 20.04 源码编译安装OpenCV 4.5.0
  • C++:继承用法详解~
  • 从挫败到精通:三步克服编程学习的难关
  • 【Leetcode 2206 】 将数组划分成相等数对 —— 哈希表与数组模拟哈希表
  • Elasticsearch 中,term 查询和 match 查询的区别
  • JavaScript常见知识点总结
  • 搜维尔科技:‌XSENS高精度惯性动作捕捉系统,人形机器人Al训练专用设备
  • 华为HCIP-datacom 真题 (2024年下半年最新题库)
  • Vue + Spring Boot + SQL Server + Python 部署到 Windows 服务器
  • 最长公共子序列
  • 卡牌抽卡机小程序搭建,探索新鲜有趣的拆卡体验