小白笔记(手机端事件)
手机端事件
——————————————————————————————————
在移动端需要做些什么,首先是事件不同,只需要在添加移动端的 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
版权声明:本文为博主原创文章,转载请附上博文链接!
下一篇: android手机传感器总结
推荐阅读
-
笔记本电脑怎么分享WIFI?让手机等客户端享受无线网络方法介绍
-
【代码笔记】Web-手机端的meta
-
JS手机端touch事件计算滑动距离的方法示例
-
Typora+PicGo+Gitee+坚果云实现Win+Linux+手机端完美Markdown云笔记套件
-
手机端html5触屏事件(touch事件)
-
百度地图自定义覆盖物手机端添加点击事件无效
-
笔记本电脑怎么分享WIFI?让手机等客户端享受无线网络方法介绍
-
Arduino 项目笔记 |基于 Arduino 和 IoT 云平台搭建物联网系统(附MIT APP Inventor手机客户端)
-
js判断手机和pc端选择不同执行事件的方法_javascript技巧
-
原生js 有没有 手机移动端 滑动 的事件?