移动端拖拽事件

MDN touch 介绍

手指在屏幕上的操作

rotate 旋转:手指在屏幕上旋转
pan 平移:手指触碰屏幕,移动,最后离开。
click(tap)点击:手指在某个位置范围内进行快速点击。
swipe 快扫:手指在设备上快速移动。
press 按压:手指按下一段时间且不移动。
pinch 缩放:两个(或多个)手指靠近或远离,用于放大缩小。

事件类型

事件规范有三种,分别是 Pointer event (指针事件)、 Mouse event (鼠标事件) 和 Touch event (触摸事件)。指针事件是鼠标与触控交互发展的标准,Pointer 是输入设备层的抽象。

Mouse event (鼠标事件) Touch event (触摸事件) Pointer event (指针事件)
mousedown touchstart pointerdown
mouseenter   pointerenter
mouseleave   pointerleave
mousemove  touchmove pointermove
mouseout   pointerout
mouseover   pointerover
mouseup touchend pointerup

触摸事件:

  touchstart:触摸开始的时候触发
  touchmove:手指在屏幕上滑动的时候触发
  touchend:触摸结束的时候触发

而每个触摸事件都包括了三个触摸列表,每个列表里包含了对应的一系列触摸点(用来实现多点触控):
  touches:当前位于屏幕上的所有手指的列表。
  targetTouches:位于当前DOM元素上手指的列表。
  changedTouches:涉及当前事件手指的列表。

每个触摸点由包含了如下触摸信息(常用):
  pageX/pageY/clientX/clientY/screenX/screenY:一个数值,动作在屏幕上发生的位置(page包含滚动距离,client不包含滚动距离,screen则以屏幕为基准)。
  radiusX/radiusY/rotationAngle:画出大约相当于手指形状的椭圆形,分别为椭圆形的两个半径和旋转角度。初步测试浏览器不支持,好在功能不常用,欢迎大家反馈
  force: 手指挤压触摸平面的压力大小。从 0.0(没有压力) 到 1.0(设备可识别的最大压力) 的浮点数。
  identifier:一个数值,相当于编号,唯一标识触摸会话(touch session)中的当前手指。
  target:DOM元素,是动作所针对的目标。

手机摇一摇示例

禁止页面缩放

<meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />

js 部分

window.onload=function(){
        
    var shakeThreshold = 1000; // 定义一个摇动的阈值
    var lastUpdate = 0; // 记录上一次摇动的时间
    var x, y, z, lastX, lastY, lastZ; // 定义x、y、z记录三个轴的数据以及上一次触发的数据
    // 监听传感器运动事件
    if (window.DeviceMotionEvent) {
        window.addEventListener('devicemotion', deviceMotionHandler,false);
    } else {
        //浏览器不支持DeviceMotion
        alert('天呐,你的手机竟然还不支持摇一摇ヾ(◍°∇°◍)ノ゙');
    }
    // 运动传感器处理
    function deviceMotionHandler(eventData) {
        var acceleration = eventData.accelerationIncludingGravity; // 获取含重力的加速度
        var curTime = new Date().getTime();
        // 100毫秒进行一次位置判断
        if ((curTime - lastUpdate) > 100) {
            var diffTime = curTime - lastUpdate;
            lastUpdate = curTime;
            x = acceleration.x;
            y = acceleration.y;
            z = acceleration.z;
            var speed = Math.abs(x + y + z - lastX - lastY - lastZ) / diffTime * 10000;
            if (speed > shakeThreshold) {
                alert("摇一摇触发")
            }
            lastX = x;
            lastY = y;
            lastZ = z;
        }
    }

}

 

posted @ 2022-12-16 14:34  柔和的天空  阅读(600)  评论(0编辑  收藏  举报