`
edison87915
  • 浏览: 199467 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

JavaScript触摸与手势事件

 
阅读更多

      

        iOS版Safari为了向开发人员传达一些特殊信息,新增了一些专有事件。因为iOS设备既没有鼠标也没有键盘,所以在为移动Safari开发交互网页时,常规的鼠标和键盘事件根本不够用。随着Android中的WebKit的加入,很多这样的专有事件变成了事实标准。

 

触摸事件

        包含iOS2.0软件的iPhone 3G发布时,也包含了一个新版本的Safari浏览器。这款新的移动Safari提供了一些与触摸(touch)操作相关的新事件。后来,Android上的浏览器也实现了相同的事件。触摸事件会在用户手指放在屏幕上面时、在屏幕上滑动时或从屏幕上移开时触发。具体来说,有以下几个触摸事件。

  • touchstart:当手指触摸屏幕时触发;即使已经有一个手指放在了屏幕上也会触发。
  • touchmove:当手指在屏幕上滑动时连续的触发。在这个事件发生期间,调用preventDefault()可阻止滚动。
  • touchend:当手指从屏幕上移开时触发。
  • touchcancel:当系统停止跟踪触摸时触发。关于此事件的确切触发事件,文档中没有明确说明。

       上面这几个事件都会冒泡,也都可以取消。虽然这些触摸事件没有在DOM规范中定义,但它们却是以兼容DOM的方式实现的。因此,每个触摸事件没有在DOM规范中定义,但它们却是以兼容DOM的方式实现的。因此,每个触摸事件的event对象都提供了在鼠标事件中常见的属性:bubbles、cancelable、view、clientX、clientY、screenX、screenY、detail、altKey、shiftKey、ctrlKey和metaKey。

 

     除了常见的DOM属性外,触摸事件还包含下列三个用于跟踪触摸的属性。

  • touches:表示当前跟踪的触摸操作的Touch对象的数组。
  • targetTouches:特定于事件目标的Touch对象的数组。
  • changeTouches:表示自上次触摸以来发生了什么改变的Touch对象的数组。

     每个Touch对象包含下列属性:

  • clientX:触摸目标在视口中的X坐标。
  • clientY:触摸目标在视口中的Y坐标。
  • identifier:表示触摸的唯一ID。
  • pageX:触摸目标在页面中的x坐标。
  • pageY:触摸目标在页面中的y坐标。
  • screenX:触摸目标在屏幕中的x坐标。
  • screenY:触摸目标在屏幕中的y坐标。
  • target:触摸的DOM节点坐标。

使用这些属性可以跟踪用户对屏幕触摸操作。来看下面的例子。

function handleTouchEvent(event) {
    //只跟踪一次触摸
    if (event.touches.length == 1) {
        var output = document.getElementById("output");
        switch (event.type) {
            case "touchstart":
                output.innerHTML = "Touch started (" + event.touches[0].clientX + "," + event.touches[0].clientY + ")";
                break;
            case "touchend":
                output.innerHTML += "<br>Touch ended (" + event.changedTouches[0].clientX + "," + event.changeTouches[0].clientY + ")";
                break;
            case "touchmove":
                event.preventDefault(); //阻止滚动
                output.innerHTML += "<br>Touch moved (" + event.changedTouches[0].clientX + "," + event.changedTouches[0].clientY + ")";
                break;
        }
    }
}
document.addEventListener("touchstart", handleTouchEvent, false);
document.addEventListener("touchend", handleTouchEvent, false);
document.addEventListener("touchmove", handleTouchEvent, false);

      

       以上代码会跟踪屏幕上发生的一次触摸操作。为简单起见,只会在有一次活动触摸操作的情况下输出信息。当touchstart事件发生时。会将触摸的位置信息输出到元素中。当touchmove事件发生时,会取消其默认行为,阻止滚动(触摸移动的默认行为是滚动页面),然后输出触摸操作的变化信息。而touched事件则会输出有关触摸操作的最终信息。注意,在touched事件发生时,touched集合中就没有任何Touch对象了,因为不存在活动的触摸操作;此时,就必须转而使用changeTouchs集合。

       这些事件会在文档的所有元素上面触发,因而可以分别操作页面的不同部分。在触摸屏幕上的元素时,这些事件发生的数序如下:

  1. touchstart
  2. mouseover
  3. mousemove
  4. mousedown
  5. mouseup
  6. click
  7. touchend

       支持触摸事件的浏览器包括iOS版Safari、Android版WebKit、beta版Dolfin、OS6+中的BlackBerry WebKit、Opera Mobile 10.1和LG专有OS中的phantom浏览器。目前只有IOS版Safari支持多点触屏。桌面版Firefox 6+和Chrome也支持触摸事件。

 

手势事件

       IOS 2.0中的Safari还引入了一组手势事件。当两个手指触摸屏幕时就会产生手势,手势通常会改变显示项的大小,或者旋转显示项。有三个手势事件,分别如下。

  • gesturestart:当一个手指已经按在屏幕上面另一个手指有触摸屏幕时触发。
  • gesturechange:当触摸屏幕的任何一个手指的位置发生变化时触发。
  • gestureend:当任何一个手指从屏幕上面移开时触发。

       只有两个手指都触摸到事件的接收容器时才会触发这些事件。在一个元素上设置事件处理程序,意味着两个手指必须同时位于该元素的范围之内,才能触发手势事件(这个元素就是目标)。由于这些事件冒泡,所以将事件处理程序放在文档上也可以处理所有手势事件。此时,事件的目标就是两个手指都位于其范围内的那个元素。

       触摸事件和手势事件之间存在某种关系。当一个手指放在屏幕上时,会触发touchstart事件。如果另一个手指又放在了屏幕上,则会先触发gesturestart事件。如果另一个手指又放在了屏幕上,则会先触发gesturestart事件,随后触发基于该手指的touchstart事件。如果一个或两个手指在屏幕上滑动,将会触发gesturechange事件,但只要有一个手指移开,就会触发gestureend事件,紧接着又会触发基于该手指的touchend事件。

       与触摸事件一样,每个手势事件的event对象都包含着标准的鼠标事件属性:bubbles、cancelable、view、clientX、clientY、screenX、screenY、detail、altKey、shiftKey、ctrlKey和metaKey。此外,还包含两个额外的属性:rotation和scale。其中,rotation属性表示手指变化引起的旋转角度,负值表示逆时针旋转,正值表示顺时针旋转(该值从0开始)。而scale属性表示两个手指间距的变化情况(例如向内收缩会缩短距离);这个值从1开始,并随距离拉大而增长,随距离缩减而减小。

       下面是使用手势事件的一个示例:

function handleGestureEvent(event) {
    var output = document.getElementById("output");
    switch(event.type) {
        case "gesturestart":
            output.innerHTML = "Gesture started (rotation=" + event.ratation +",scale=" + event.scale + ")";
            break;
        case "gestureend":
            output.innerHTML += "<br>Gesture ended (rotation+" + event.rotation + ",scale=" + event.scale + ")";
            break;
        case "gesturechange":
            output.innerHTML += "<br>Gesture changed (rotation+=" + event.rotation + ",scale+" + event.scale + ")";
            break;
    }
}
document.addEventListener("gesturestart", handleGestureEvent, false);
document.addEventListener("gestureend", handleGestureEvent, false);
document.addEventListener("gesturechange", handleGestureEvent, false);

       与前面演示触摸事件的例子一样,这里的代码只是将每个事件都关联到同一个函数中,然后通过该函数输出每个事件的相关信息。

 

note:触摸事件也会返回rotation和scale属性,但这两个属性只会在两个手指与屏幕保持接触时才会发生变化。一般来说,使用基于两个手指的手势事件,要比管理触摸事件中的所有交互要容易的多。

 

阅读原文

 

扩展阅读:附件 -> handling Event

分享到:
评论

相关推荐

    Hammerjs实现多点触摸手势的javascript库

    **Hammer.js:多点触摸手势的JavaScript库详解** 在当今的移动设备世界中,用户交互方式已经不再局限于鼠标点击,而是发展到了触屏滑动、捏合缩放等多点触摸手势。Hammer.js是一个强大的JavaScript库,专门用于处理...

    JS触摸与手势事件详解

    JS触摸与手势事件详解主要涉及了在移动设备上使用JavaScript(JS)时对用户触摸动作的响应技术。随着智能手机和平板电脑的普及,用户习惯通过触摸屏进行交互,因此开发针对触摸事件的网页和应用变得尤为重要。本文将...

    一个JavaScript库,用于支持触摸屏设备上的触摸(尤其是多点触摸)手势_JavaScript_下载.zip

    本资源提供了一个专门针对触摸屏设备的JavaScript库,它优化了对触摸事件和多点触摸手势的支持,使开发者能够更轻松地构建触摸友好的用户界面。这个库被称为“Gesture”,它是一个强大的工具,能够帮助开发者在移动...

    用于同步触摸手势的javascript库_JavaScript_下载.zip

    "用于同步触摸手势的javascript库"就是为了满足这一需求而诞生的。 该压缩包中的"fingers.js-master"可能是一个JavaScript库,专门用于处理和识别各种触摸手势,如滑动(swipe)、捏合(pinch)、旋转(rotate)...

    javascript开发移动端app网站-处理手机手势,手指触摸事件.zip

    在JavaScript开发移动端应用程序时,尤其是构建手机App网站,理解和处理手机手势及手指触摸事件是至关重要的。这些事件使得用户能够通过手机屏幕上的直观交互来控制和操作应用,从而提供更优秀的用户体验。以下是对...

    javascript中的手势识别器_JavaScript_TypeScript_下载.zip

    在JavaScript开发中,手势识别器是一种重要的工具,它允许用户通过触摸或鼠标操作与Web应用程序进行更直观的交互。在移动设备尤其是触摸屏设备日益普及的今天,手势识别技术成为了提升用户体验的关键。JavaScript中...

    使用JavaScript和HTML5进行手势识别_JavaScript_下载.zip

    在现代Web开发中,手势识别已经成为一种常见的交互方式,特别是在移动设备上,用户可以通过滑动、捏合等手势与应用程序进行更直观的交互。这个压缩包"使用JavaScript和HTML5进行手势识别_JavaScript_下载.zip"包含了...

    组件绑定鼠标触摸手势的小助手

    在JavaScript开发中,手势处理是构建交互式Web应用的关键部分,特别是随着移动设备的普及,触摸手势成为用户体验的重要组成部分。"组件绑定鼠标触摸手势的小助手" 提供了一种简便的方法来管理和响应用户的各种输入...

    手机触摸屏事件

    触摸屏是一种输入设备,通过人体(通常是手指)与屏幕表面的接触来控制设备,实现人机交互。在手机等移动设备上,触摸屏已经成为主要的用户界面之一,支持多点触控、手势识别等功能,极大地丰富了用户的操作体验。 ...

    基于JavaScript开发的移动端手势库

    基于JavaScript开发的移动端手势库是专门为触摸屏设备设计的,它们允许用户通过各种手势来控制和与应用程序进行交互,如滑动、捏合、旋转、双击等。这样的库极大地提升了移动应用的用户体验,因为它们更直观、更符合...

    浏览器的手势事件管理器(基于hammerjs)_JavaScript_TypeScript_下载.zip

    这个压缩包“浏览器的手势事件管理器(基于hammerjs)_JavaScript_TypeScript_下载.zip”包含了一个名为“mjolnir.js-master”的项目,它显然是一个基于Hammer.js库的手势事件管理系统。Hammer.js是一个强大的...

    单击事件和触摸事件的区别.zip

    在编程领域,特别是移动应用开发中,理解和掌握单击事件(Click Event)与触摸事件(Touch Event)的区别至关重要。这两个事件处理方式虽然都是用户与屏幕交互的反馈机制,但它们在响应时间、触发条件和使用场景上...

    zingtouch:现代网络JavaScript触摸手势检测库

    现代JavaScript触摸手势库。 该库允许开发人员配置预先存在的手势,以及使用ZingTouch的生命周期创建自己的手势。 快速链接 目录 概述 ZingTouch的构建旨在根据需要使浏览器的手势实现变得简单或复杂。 ZingTouch...

    JS触摸事件、手势事件详解

    在Web前端开发中,JS(JavaScript)提供了丰富的触摸事件和手势事件接口,使得开发者可以轻松创建出既灵敏又实用的用户界面。本文将详细解读JS触摸事件和手势事件的方方面面,帮助您更好地理解和应用这些事件。 ...

    zingtouch一个JavaScript手势检测库

    ZingTouch 支持多种常见的触摸手势,包括但不限于: - **Tap(轻触)**:单个手指快速按下并释放屏幕。 - **Swipe(滑动)**:一个或多个手指在屏幕上沿直线移动,分为水平滑动和垂直滑动。 - **Pan(平移)**:...

    用于在Ember应用程序中构建和使用触摸手势的轻量级库_JavaScript_下载.zip

    这些文件定义了触摸手势的检测和处理逻辑,以及如何与Ember应用程序集成。 2. **示例**:为了帮助开发者理解如何使用库,压缩包可能包含一个或多个示例项目,演示了如何在Ember应用中引入和使用ember-touch,包括...

    interactjs实现JavaScript拖放调整大小和多点触摸惯性和捕捉手势

    交互库interact.js是JavaScript开发中的一个强大工具,专门用于实现拖放、调整大小和处理多点触摸事件,包括惯性、捕捉手势等高级功能。它使得在网页上创建交互式元素变得更加简单和灵活,尤其适合开发需要动态操作...

    YrobotTouch一个方便轻量的小程序手势事件监听库

    2. **易用性**:通过简单的API接口,开发者可以快速集成手势事件监听,无需深入了解复杂的触摸事件机制。 3. **多手势支持**:库内集成了多种常见手势,如单击、双击、长按、滑动等,满足大部分交互需求。 4. **...

    基于Jquery的手机触摸屏事件插件,可以辨别手机触摸滑动事件的方向等。

    `jQuery`,作为一个广泛使用的JavaScript库,虽然默认不包含对触摸事件的处理,但可以通过各种插件来扩展其功能,比如本话题提到的"基于jQuery的手机触摸屏事件插件"。这个插件,名为`TouchSwipe`,专门设计用于识别...

Global site tag (gtag.js) - Google Analytics