移动端事件
移动端事件
移动端触摸事件
touchstart
当手指放在屏幕上出发
touchmove
当手指在屏幕上滑动时,连续触发
touchend
当手指从屏幕离开时触摸
touchcancel
当系统停止跟踪时触发(在拖动中断时候触发),系统什么时候取消,文档没有明确的说明。
由于触摸会导致屏幕动来动去,所以可以会在这些事件的事件处理函数内使用
event.preventDefault()
,来阻止屏幕的默认滚动。
触摸事件还包含下列三个用于跟踪触摸的属性:
touches:表示当前跟踪的触摸操作的touch对象的数组。
当一个手指在触屏上时,event.touches.length=1, 当两个手指在触屏上时,event.touches.length=2,以此类推。
targetTouches:特定于事件目标的touch对象数组。
因为touch事件是会冒泡的,所以利用这个属性指出目标对象。
changedTouches:表示自上次触摸以来发生了什么改变的touch对象的数组。
每个touch对象都包含下列几个属性:
clientX:触摸目标在视口中的x坐标。
clientY:触摸目标在视口中的y坐标。
clientX/clientY不包括对象滚动而隐藏的偏移量
identifier:标识触摸的唯一ID。
pageX:触摸目标在页面中的x坐标。
pageY:触摸目标在页面中的y坐标。
pageX/pageY包括对象滚动而隐藏的偏移量。
screenX:触摸目标在屏幕中的x坐标。
screenY:触摸目标在屏幕中的y坐标。
screenX/screenY代表事件发生的位置对于屏幕的偏移量
target:触摸的DOM节点目标。
offsetX/offsetY
触摸目标相对与这个DOM元素左上角的定位,不要边框,在边框上会是负数。
layerX/Y是兼容FF的写法。
使用clientX……
时,必须要指明具体的touch对象,而不要直接指明数组。
event.touches[0]
在touchend事件处理函数中,当该事件发生时,touches里面已经没有任何的touch对象了,此时,就要使用changeTouches集合。
参考:http://www.jianshu.com/p/832f36531df9 ,http://www.th7.cn/Design/idea/201305/153435.shtml
触摸事件顺序
事件的触发过程为:mousedown -> mouseup -> click 三步。
手机上响应 click
事件会有300ms的延迟,但可以添加一下meta
标签去除:
点击穿透
而由于click事件的滞后性(300ms),在这300ms内上层元素隐藏或消失了,下层同样位置的DOM元素触发了click事件(如果是input框则会触发focus事件),看起来就像点击的target“穿透”到下层去了。
解决方法:
遮挡
元素消失可以使用fade
效果。
或者在点击处生成一个透明的元素,在一定时间后移除。
手势事件
gesturestart:当一个手指已经按在屏幕上,而另一个手指又触摸在屏幕时触发。
gesturechange:当触摸屏幕的任何一个手指的位置发生变化时触发。
gestureend:当任何一个手指从屏幕上面移开时触发。
【注意】只有两个手指都触摸到事件的接收容器时才触发这些手势事件。
1、当一个手指放在屏幕上时,会触发touchstart事件,如果另一个手指又放在了屏幕上,则会触发gesturestart事件,随后触发基于该手指的touchstart事件。
2、如果一个或两个手指在屏幕上滑动,将会触发gesturechange事件,但只要有一个手指移开,则会触发gestureend事件,紧接着又会触发toucheend事件。
手势的专有属性:
rotation:表示手指变化引起的旋转角度,负值表示逆时针,正值表示顺时针,从零开始。
scale:表示两个手指之间的距离情况,向内收缩会缩短距离,这个值从1开始,并随距离拉大而增长。
Last updated