本文为大家分享了JS触摸与手势事件,供大家参考,具体内容如下
1.触摸事件
包含 iOS 2.0 软件的 iPhone 3G 发布时,也包含了一个新版本的 Safari 浏览器。这款新的移动 Safari提供了一些与触摸(touch)操作相关的新事件。后来,Android 上的浏览器也实现了相同的事件。触摸事件会在用户手指放在屏幕上面时、在屏幕上滑动时或从屏幕上移开时触发。具体来说,有以下几个触摸事件。
调用 preventDefault()可以阻止滚动。
属性:bubbles、cancelable、view、clientX、clientY、screenX、screenY、detail、altKey、shiftKey、ctrlKey、MetaKey。
除了常见的DOM属性,触摸事件还包含下列三个用于跟踪触摸的属性。
每个Touch 对象包含下列属性
。
clientX :触摸目标在视口中的 x 坐标。 clientY :触摸目标在视口中的 y 坐标。 identifier :标识触摸的唯一 ID。 pageX :触摸目标在页面中的 x 坐标。 pageY :触摸目标在页面中的 y 坐标。 screenX :触摸目标在屏幕中的 x 坐标。 screenY :触摸目标在屏幕中的 y 坐标。 target :触摸的 DOM 节点目标。
Touch moved (" + event.changedTouches[0].clientX + "," + event.changedTouches[0].clientY + ")"; break; } } } EventUtil.addHandler(document,"touchstart",handleTouchEvent); EventUtil.addHandler(document,"touchend","touchmove",handleTouchEvent);
以上代码会跟踪屏幕上发生的一次触摸操作。为简单起见,只会在有一次活动触摸操作的情况下输出信息。当 touchstart 事件发生时,会将触摸的位置信息输出到
这些事件会在文档的所有元素上面触发,因而可以分别操作页面的不同部分。在触摸屏幕上的元素时,这些事件(包括鼠标事件)发生的顺序如下: (1) touchstart (2) mouSEOver (3) mousemove (一次) (4) mousedown (5) mouseup (6) click (7) touchend 支持触摸事件的浏览器包括 iOS 版 Safari、Android 版 WebKit、bada 版 Dolfin、OS6+中的 BlackBerryWebKit、Opera Mobile 10.1+和 LG 专有 OS 中的 Phantom浏览器。
2. 手势事件
iOS 2.0 中的 Safari 还引入了一组手势事件。当两个手指触摸屏幕时就会产生手势,手势通常会改变显示项的大小,或者旋转显示项。有三个手势事件,分别介绍如下。
gesturestart :当一个手指已经按在屏幕上而另一个手指又触摸屏幕时触发。 gesturechange :当触摸屏幕的任何一个手指的位置发生变化时触发。 gestureend :当任何一个手指从屏幕上面移开时触发。
只有两个手指都触摸到事件的接收容器时才会触发这些事件。在一个元素上设置事件处理程序,意味着两个手指必须同时位于该元素的范围之内,才能触发手势事件(这个元素就是目标)。由于这些事件冒泡,所以将事件处理程序放在文档上也可以处理所有手势事件。此时,事件的目标就是两个手指都位于其范围内的那个元素。
触摸事件和手势事件之间存在某种关系。当一个手指放在屏幕上时,会触发 touchstart 事件。如果另一个手指又放在了屏幕上,则会先触发 gesturestart 事件,随后触发基于该手指的 touchstart事件。如果一个或两个手指在屏幕上滑动,将会触发 gesturechange 事件。但只要有一个手指移开,就会触发 gestureend 事件,紧接着又会触发基于该手指的 touchend 事件。 与触摸事件一样,每个手势事件的 event 对象都包含着标准的鼠标事件属性: bubbles 、cancelable 、 view 、 clientX 、 clientY 、 screenX 、 screenY 、 detail 、 altKey 、 shiftKey 、ctrlKey 和 MetaKey 。此外,还包含两个额外的属性: rotation 和 scale 。其中, rotation 属性表示手指变化引起的旋转角度,负值表示逆时针旋转,正值表示顺时针旋转(该值从 0 开始)。而 scale属性表示两个手指间距离的变化情况(例如向内收缩会缩短距离);这个值从 1 开始,并随距离拉大而增长,随距离缩短而减小。
下面是使用手势事件的一个示例。
Gesture changed (rotation=" + event.rotation + ",scale=" + event.scale + ")"; break; } } document.addEventListener("gesturestart",handleGestureEvent,false); document.addEventListener("gestureend",false); document.addEventListener("gesturechange",false);