欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

小白笔记(手机端事件)

程序员文章站 2022-04-19 10:22:16
...

手机端事件
——————————————————————————————————
在移动端需要做些什么,首先是事件不同,只需要在添加移动端的 touchatart 、 touchmove 、 touchend 就可以了,还有一个不同的时移动端获取坐标是 event.touches[0].clientX 和 event.touches[0].clientY 。
如果是PC端就使用event,如果是移动端就使用 event.touches 。
//阻止页面的滑动默认事件
document.addEventListener(“touchmove”,function(){
event.preventDefault();
},false);
——————————————————————————————
PC端先总结下区别:

event.clientX、event.clientY

鼠标相对于浏览器窗口可视区域的X,Y坐标(窗口坐标),可视区域不包括工具栏和滚动条。IE事件和标准事件都定义了这2个属性

event.pageX、event.pageY

类似于event.clientX、event.clientY,但它们使用的是文档坐标而非窗口坐标。这2个属性不是标准属性,但得到了广泛支持。IE事件中没有这2个属性。

event.offsetX、event.offsetY //PC端用鼠标

鼠标相对于事件源元素(srcElement)的X,Y坐标,只有IE事件有这2个属性,标准事件没有对应的属性。
小白笔记(手机端事件)
event.screenX、event.screenY

鼠标相对于用户显示器屏幕左上角的X,Y坐标。标准事件和IE事件都定义了这2个属性

//图片是借鉴别人的
————————————————————————————————————
2.2移动端web新增touch事件
​随着触屏设备的普及,w3c为移动端web新增了touch事件。

​最基本的touch事件包括4个事件:

touchstart

当在屏幕上按下手指时触发

touchmove

当在屏幕上移动手指时触发

touchend

当在屏幕上抬起手指时触发

touchcancel


Touch详解
screenX:

触摸点相对于屏幕左边缘的 x 坐标。

screenY:

触摸点相对于屏幕上边缘的 y 坐标。

clientX:

触摸点相对于浏览器的 viewport左边缘的 x 坐标。不会包括左边的滚动距离。

clientY:

触摸点相对于浏览器的 viewport上边缘的 y 坐标。不会包括上边的滚动距离。

pageX:

触摸点相对于 document的左边缘的 x 坐标。 与 clientX 不同的是,他包括左边滚动的距离,如果有的话。

pageY:

触摸点相对于 document的左边缘的 y 坐标。 与 clientY 不同的是,他包括上边滚动的距离,如果有的话。

target:

总是表示 手指最开始放在触摸设备上的触发点所在位置的 element。 即使已经移出了元素甚至移出了document, 他表示的element仍然不变
——————————————————————————————————————
封装移动事件(长按,单击)

(function (window){  //传入window,提高变量的查找效率
    function myQuery(selector){  //这个函数就是对外提供的接口。
        //调用这个函数的原型对象上的_init方法,并返回
        return myQuery.prototype._init(selector);
    }
    myQuery.prototype = {
        /*初始化方法,获取当前query对象的方法*/
        _init: function (selector){
            if (typeof selector == "string"){
                //把查找到的元素存入到这个原型对象上。
                this.ele = window.document.querySelector(selector);
                //返回值其实就是原型对象。
                return this;
            }
        },
        /*单击事件:
         * 为了规避click的300ms的延迟,自定义一个单击事件
         * 触发时间:
         *   当抬起手指的时候触发
         *   需要判断手指落下和手指抬起的事件间隔,如果小于500ms表示单击时间。
         *
         *   如果是大于等于500ms,算是长按时间
         * */
        tap: function (handler){
            this.ele.addEventListener("touchstart", touchFn);
            this.ele.addEventListener("touchend", touchFn);

            var startTime,
                endTime;

            function touchFn(e){
                e.preventDefault()
                switch (e.type){
                    case "touchstart":
                        startTime = new Date().getTime();
                        break;
                    case "touchend":
                        endTime = new Date().getTime();
                        if (endTime - startTime < 500){
                            handler.call(this, e);
                        }
                        break;
                }
            }
        },
        /**
         * 长按
         * @param handler
         */
        longTag: function (handler){
            this.ele.addEventListener("touchstart", touchFn);
            this.ele.addEventListener("touchmove", touchFn);
            this.ele.addEventListener("touchend", touchFn);
            var timerId;

            function touchFn(e){
                switch (e.type){
                    case "touchstart" :  //500ms之后执行
                        timerId = setTimeout(function (){
                            handler.call(this, e);
                        }, 500)
                        break;
                    case "touchmove" :
                        //如果中间有移动也清除定时器
                        clearTimeout(timerId)
                        break;
                    case "touchend" :
                        //如果在500ms之内抬起了手指,则需要定时器
                        clearTimeout(timerId);
                        break;
                }
            }
        },
        /**
         * 左侧滑动。
            记录手指按下的左边,在离开的时候计算 deltaX是否满足左滑的条件
         *
         */
        slideLeft: function (handler){
            this.ele.addEventListener("touchstart", touchFn);
            this.ele.addEventListener("touchend", touchFn);
            var startX, startY, endX, endY;

            function touchFn(e){
                e.preventDefault();
                var firstTouch = e.changedTouches[0];
                switch (e.type){
                    case "touchstart":
                        startX = firstTouch.pageX;
                        startY = firstTouch.pageY;
                        break;
                    case "touchend":
                        endX = firstTouch.pageX;
                        endY = firstTouch.pageY;
//x方向移动大于y方向的移动,并且x方向的移动大于25个像素,表示在向左侧滑动
                        if (Math.abs(endX - startX) >= Math.abs(endY - startY) && startX - endX >= 25){
                            handler.call(this, e);
                        }
                        break;
                }
            }
        },
        /**
         * 右侧滑动。
         *
         */
        rightLeft: function (e){
            //TODO:
        }
    }
    window.$ = window.myQuery = myQuery;
})(window);

3.1.3 touchend
​ 当用户的手指抬起的时候,会触发 touchend 事件。如何用户的手指从触屏设备的边缘移出了触屏设备,也会触发 touchend 事件。

--------------------- (借鉴的作者)
作者:做人要厚道2013
来源:CSDN
原文:https://blog.csdn.net/u012468376/article/details/72808761
版权声明:本文为博主原创文章,转载请附上博文链接!

相关标签: 手机端