zoukankan      html  css  js  c++  java
  • 移动端事件

    一、事件定义及分类
    1. click事件
    单击事件,类似于PC端的click,但在移动端中,连续click的触发有200ms ~ 300ms的延迟
     
    2. touch类事件
    触摸事件,有touchstart touchmove touchend touchcancel 四种之分
    touchstart:手指触摸到屏幕会触发
    touchmove:当手指在屏幕上移动时,会触发
    touchend:当手指离开屏幕时,会触发
    touchcancel:可由系统进行的触发,比如手指触摸屏幕的时候,突然alert了一下,或者系统中其他打断了touch的行为,则可以触发该事件
     
    3. tap类事件
    触碰事件,我目前还不知道它和touch的区别,一般用于代替click事件,有tap longTap singleTap doubleTap四种之分
    tap: 手指碰一下屏幕会触发
    longTap: 手指长按屏幕会触发
    singleTap: 手指碰一下屏幕会触发
    doubleTap: 手指双击屏幕会触发
     
    4. swipe类事件
    滑动事件,有swipe swipeLeft swipeRight swipeUp swipeDown 五种之分
    swipe:手指在屏幕上滑动时会触发
    swipeLeft:手指在屏幕上向左滑动时会触发
    swipeRight:手指在屏幕上向右滑动时会触发
    swipeUp:手指在屏幕上向上滑动时会触发
    swipeDown:手指在屏幕上向下滑动时会触发
     
    二、代码库:
    1、Swiper是纯javascript打造的滑动特效插件,面向手机、平板电脑等移动终端。
    2、HammerJS是一个开源的库,可以识别由 touch, mouse 和 pointerEvents 触发的系列手势。它非常小巧,压缩后仅有3.96kb,并没有多余的脚本依赖。
    在hammer.js框架当中,为我们提供的几个方法是:
    Pan   单指 触碰(可以进行轻微的摩擦)  一个手指就能够触发 阈值10,包含了panstart、panmove、panend、pancancel、panleft、panright、panup、pandown
    Pinch 两个手指头  捏~ 在识别之前最小的值是0,包含了pinchstart、pinchmove、pinchend、pinchcancel、pinchin (用于缩小)、pinchout (用于放大)
    Press 单指 长按 500毫秒以上才可以 运动最小距离5 只有press事件
    Rotate 两只手指头 默认旋转角度0,包含了rotatestart、rotatemove、rotateend、rotatecancel
    Swipe 单指 滑动 阈值10 大于0.65px/ms的速度才可以触发,包含了swipeleft、swiperight、swipeup、swipedown
    Tap 两下的轻敲 两次的差异在10之内 间隔在300毫秒之内 一次按下的时间不大于250ms 才可以触发
     
    三、简易实现
    (function () {
        var coord={},
            start={},
            el;
    
        document.addEventListener('touchstart', touchStart);
        document.addEventListener('touchmove',touchMove);
        document.addEventListener('touchend',touchEnd);
        document.addEventListener('touchcanel',touchCancel);
    
        function newEvent(type){
            return new Event(type,{ bubbles: true,cancelable: true});
        }
    
        function touchCancel () {
            coord = {}
        }
    
        function touchStart(e){
            var c = e.touches[0];
            start = {
                x: c.clientX,
                y: c.clientY,
                time: Date.now()
            };
            el= e.target;
            el='tagName' in el ? el : el.parentNode;
        }
    
        function touchMove(e){
            var t = e.touches[0];
            coord = {
                x: t.clientX - start.x,
                y: t.clientY - start.y
            }
        }
    
        function touchEnd(){
            var touchTimes = Date.now() - start.time,
                    c = 250 > touchTimes && Math.abs(coord.x) > 20 || Math.abs(coord.x) > 80,
                    s = 250 > touchTimes && Math.abs(coord.y) > 20 || Math.abs(coord.y) > 80,
                    left = coord.x < 0,
                    top = coord.y < 0;
            if (250 > touchTimes && (isNaN(coord.y) || Math.abs(coord.y)) < 12 && (isNaN(coord.x) || Math.abs(coord.x) < 12)) {
                el.dispatchEvent(newEvent('tap'));
            }else if(750<touchTimes && (isNaN(coord.y) || Math.abs(coord.y)) < 12 && (isNaN(coord.x) || Math.abs(coord.x) < 12)){
                el.dispatchEvent(newEvent('longTap'));
            }
            c ? el.dispatchEvent(left ? newEvent('swipeLeft') : newEvent('swipeRight')) : s && el.dispatchEvent(top ? newEvent('swipeUp') : newEvent('swipeDown'));
    
            coord={};
        }
    }());
     
     
     
  • 相关阅读:
    Linux 终端管理工具,让终端管理更简单。这一期是【FinalShell】
    django添加检查用户名和手机号数量接口
    vue发送短信逻辑
    使用celery异步发送短信
    redis的pipline使用
    后端注册接口完善
    检查用户名是否使用接口
    celery配置与基本使用
    Celery介绍
    ubuntu开发机初始化
  • 原文地址:https://www.cnblogs.com/chenlogin/p/7495723.html
Copyright © 2011-2022 走看看