天天看點

移動端監聽使用者在盒子内的滑動事件

var startx, starty;

    //獲得角度
    function getAngle(angx, angy) {
      return (Math.atan2(angy, angx) * 180) / Math.PI;
    }
    //根據起點終點傳回方向 1向上滑動 2向下滑動 3向左滑動 4向右滑動 0點選事件
    function getDirection(startx, starty, endx, endy) {
      var angx = endx - startx;
      var angy = endy - starty;
      var result = 0;

      //如果滑動距離太短
      if (Math.abs(angx) < 2 && Math.abs(angy) < 2) {
        return result;
      }

      var angle = getAngle(angx, angy);
      if (angle >= -135 && angle <= -45) {
        result = 1;
      } else if (angle > 45 && angle < 135) {
        result = 2;
      } else if (
        (angle >= 135 && angle <= 180) ||
        (angle >= -180 && angle < -135)
      ) {
        result = 3;
      } else if (angle >= -45 && angle <= 45) {
        result = 4;
      }
      return result;
    }
    //手指接觸螢幕
    document.querySelector(".content").addEventListener(
      "touchstart",
      function(e) {
        startx = e.touches[0].pageX;
        starty = e.touches[0].pageY;
      },
      false
    );

    //手指離開螢幕
    document.querySelector(".content").addEventListener(
      "touchend",
      function(e) {
        var endx, endy;
        endx = e.changedTouches[0].pageX;
        endy = e.changedTouches[0].pageY;
        var direction = getDirection(startx, starty, endx, endy);
        switch (direction) {
          case 0:
            // 點選
            break;
          case 1:
            // 向上
            break;
          case 2:
            // 向下
            break;
          case 3:
            // 向左
            break;
          case 4:
            // 向右
            break;
          default:
            // 點選
            break;
        }
      },
      false
    );