资讯专栏INFORMATION COLUMN

H5触摸事件判断滑动方向

hersion / 1927人阅读

摘要:可以通过检查触摸事件的属性来确定当前事件属于哪种类型当用户在触摸平面上放置了一个触点时触发。判断滑动方向基本原理就是记录开始滑动和结束滑动的坐标位置,然后进行相对位置的计算。

为了给触摸界面提供有力支持, 触摸事件提供了响应用户对触摸屏或者触摸板上操作的能力.

接口 TouchEvent

TouchEvent 是一类描述手指在触摸平面(触摸屏、触摸板等)的状态变化的事件。这类事件用于描述一个或多个触点,使开发者可以检测触点的移动,触点的增加和减少,等等。每 个 Touch 对象代表一个触点; 每个触点都由其位置,大小,形状,压力大小,和目标 element 描述。 TouchList 对象代表多个触点的一个列表.

触摸事件的类型

为了区别触摸相关的状态改变,存在多种类型的触摸事件。可以通过检查触摸事件的 TouchEvent.type 属性来确定当前事件属于哪种类型

touchstart:当用户在触摸平面上放置了一个触点时触发。

touchend:当一个触点被用户从触摸平面上移除(当用户将一个手指离开触摸平面)时触发。

touchmove:当用户在触摸平面上移动触点时触发。

touchcancel:当触点由于某些原因被中断时触发。

判断滑动方向

基本原理就是记录开始滑动(touchStart)和结束滑动(touchEnd)的坐标位置,然后进行相对位置的计算。

touchStart:function(e){
    startX = e.touches[0].pageX;
    startY = e.touches[0].pageY;
    e = e || window.event;
 },
touchEnd:function(e){
    const that = this;
    endX = e.changedTouches[0].pageX;
    endY = e.changedTouches[0].pageY;
    that.upOrDown(startX,startY,endX,endY);
},
upOrDown:function (startX, startY, endX, endY) {
    const that = this;
    let direction = that.GetSlideDirection(startX, startY, endX, endY);
    switch(direction) {
      case 0:
        console.log("没滑动");
        break;
      case 1:
        console.log("向上");
        break;
      case 2:
        console.log("向下");
        break;
      case 3:
        console.log("向左");
        break;
      case 4:
        console.log("向右");
        break;
      default:
        break;
    }
  },
//根据起点和终点返回方向 1:向上,2:向下,3:向左,4:向右,0:未滑动
  GetSlideDirection:function (startX, startY, endX, endY) {
    const that = this;
    let dy = startY - endY;
    let dx = endX - startX;
    let result = 0;
    //如果滑动距离太短
    if(Math.abs(dx) < 2 && Math.abs(dy) < 2) {
      return result;
    }
    let angle = that.GetSlideAngle(dx, dy);
    if(angle >= -45 && angle < 45) {
      result = 4;
    }else if (angle >= 45 && angle < 135) {
      result = 1;
    }else if (angle >= -135 && angle < -45) {
      result = 2;
    }
    else if ((angle >= 135 && angle <= 180) || (angle >= -180 && angle < -135)) {
      result = 3;
    }
    return result;
  },
  //返回角度
  GetSlideAngle:function (dx, dy) {
    return Math.atan2(dy, dx) * 180 / Math.PI;
  }
原生JS方法

除了H5新增的方法外,还可以用原生JS判断view的滑动方向,代码如下(可直接运行):
要注意的是chrome对document.body.scrollTop一直是0,需要改成document.documentElement.scrollTop




  
  菜鸟教程(runoob.com)
  


HEllo word

HEllo word

HEllo word

HEllo word

HEllo word

HEllo word

HEllo word

HEllo word

HEllo word

HEllo word

HEllo word

HEllo word

HEllo word

HEllo word

HEllo word

HEllo word

HEllo word

HEllo word

HEllo word

HEllo word

HEllo word

HEllo word

HEllo word

HEllo word

HEllo word

HEllo word

HEllo word

HEllo word

HEllo word

HEllo word

HEllo word

HEllo word

HEllo word

HEllo word

HEllo word

HEllo word

HEllo word

HEllo word

HEllo word

HEllo word

HEllo word

HEllo word

HEllo word

HEllo word

HEllo word

HEllo word

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/107941.html

相关文章

  • 微信里面防止下拉"露底"组件

    摘要:从本人这两个月移动实践的经验来看,微信的里面和的滑动效果无论是在安卓还是下的体验都很一般,有明显的卡顿现象,在安卓下面还会出现滑动过快的时候在页面停下来之后滚动条才闪到相应位置的现象。 前言 在微信里面浏览页面的时候,有一个很管用的方法可以区分这个页面是原生的还是H5形式的。随便打开一个页面,用力往下扯的时候,如果页面上方出现了黑底,黑底上有一行诸如网页由game.weixin.qq....

    hot_pot_Leo 评论0 收藏0
  • 移动端手势库设计与实践

    摘要:前言本次给大家分享的是常见的移动端单点触摸事件的设计思路及实践。实现即手指滑动事件,应用场景如轮播图左右滑动切换,整屏页面滑动翻页等,算是移动端最常见的手势之一了。 前言 本次给大家分享的是常见的移动端单点触摸事件的设计思路及实践。 核心技术 主要就是利用移动端的以下3个触摸事件,来模拟和实现自定义的手势操作 touchstart:手指触摸到屏幕的一瞬间触发 touchmove:手指...

    wudengzan 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<