`

JS—触摸事件、手势事件

阅读更多

最近开发手机网页时遇到下拉加载更多功能,开始解决思路是监听滚动条位置,到底部时触发加载事件。在电脑模拟手机和安卓上运行正常,测试苹果时出问题。搜索后发现是苹果的“橡皮筋”弹性滑动导致,并且这个是系统所带,无法禁止。于是开始换思路,用触摸事件来解决。以下为学习总结:

 

①触摸事件touchstart、touchmove和touchend是iOs版Safari浏览器为了向开发人员传达一些信息新添加的事件。因为iOs设备既没有鼠标也没有键盘,所以在为移动Safari浏览器开发交互性网页的时候,PC端的鼠标和键盘事件是不够用的。

touchstart事件:当手指触摸屏幕时候触发,即使已经有一个手指放在屏幕上也会触发。

touchmove事件:当手指在屏幕上滑动的时候连续地触发。在这个事件发生期间,调用preventDefault()事件可以阻止滚动。

touchend事件:当手指从屏幕上离开的时候触发。

touchcancel事件:当系统停止跟踪触摸的时候触发。关于这个事件的确切出发时间,文档中并没有具体说明

 

注意:以上事件都会冒泡,虽然触摸事件没有在DOM规范中定义,但他们却是以兼容DOM的方式实现的。所以每个触摸事件的event对象都提供了在鼠标事件中常见的属性,

 

②兼容情况:

支持触摸事件(touchstart、touchmove和touchend)的浏览器有:iOs版Safari、Android版WebKit、bada版Dolfin、OS6+中的BlackBerry WebKit、Opera Mobile 10.1+和LG专有OS中的Phantom浏览器。目前只有iOs版Safari支持多点触摸。PC版Firefox 6+ 和Chrome也支持触摸事件。

 

 

③事件对象

事件对象是用来记录一些事件发生时的相关信息的对象。事件对象只有事件发生时才会产生,并且只能是事件处理函数内部访问,在所有事件处理函数运行结束后,事件对象就被销毁!

W3C DOM把事件对象作为事件处理函数的第一个参数传入进去

IE将事件对象作为window对象的一个属性(相当于全局变量)

 

④针对鼠标事件,有哪些不适应?

1.dbclick

触屏设备不支持双击事件。双击浏览器窗口,会放大画面。

可以通过在head标签内加上这么一行:  <meta name="viewport" content="width=device-width, minimum-scale=1.0,maximum-scale=1.0,user-scalable=no">

这样页面不会随着用的手势而放大缩小

2.mouse

mouse

在触屏上,我们单击一个元素,会相应的触发:mousemove mousedown mouseup click,所以当我们编写移动客户端界面时,可以为元素直接添加move事件,可以提高效率。

同时也会触发mouseover与mouseout,测试结果,我发现,只有当页面第一次刷新时,单击元素,参会触发mouseover事件。

 

随着触屏移动端设备的普及使用,W3C开始制定TouchEvent(触摸事件)规范。

 

1.触摸事件

该类事件会在用户手指放在屏幕上面时,在屏幕上滑动时,或从屏幕上移开时触发。

具体来说有以下几个触摸事件。

touchstart当手指放在屏幕上触发。

touchmove当手指在屏幕上滑动时,连续地触发。

touchend当手指从屏幕上离开时触发。

touchcancel当系统停止跟踪时触发,系统什么时候取消,文档没有明确的说明。

【总】以上四个,是w3c提供的触摸事件,只针对触摸设备,最常用的是前三个。

由于触摸会导致屏幕动来动去,所以可以会在这些事件的事件处理函数内使用event.preventDefault(),来阻止屏幕的默认滚动

 

2.跟踪属性

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

1.touches:表示当前跟踪的触摸操作的touch对象的数组。

当一个手指在触屏上时,event.touches.length=1,

当两个手指在触屏上时,event.touches.length=2,以此类推。

2.targetTouches:特定于事件目标的touch对象数组。

因为touch事件是会冒泡的,所以利用这个属性指出目标对象。

changedTouches:表示自上次触摸以来发生了什么改变的touch对象的数组。

3.每个touch对象都包含下列几个属性:

clientX:触摸目标在视口中的x坐标。

clientY:触摸目标在视口中的y坐标。

identifier:标识触摸的唯一ID

pageX:触摸目标在页面中的x坐标。

pageY:触摸目标在页面中的y坐标。

screenX:触摸目标在屏幕中的x坐标。

screenY:触摸目标在屏幕中的y坐标。

target:触摸的DOM节点目标。

【如何使用呢?】

EventUtil.addHandler(div,"touchstart",function(event){
        div.innerHTML=event.touches[0].clientX+','+event.touches[0].clientY;
    });
    EventUtil.addHandler(div,"touchmove",function(event){
        event.preventDefault();
        div.innerHTML=event.touches[0].clientX;
    });
    EventUtil.addHandler(div,"touchend",function(event){
        div.innerHTML=event.changedTouches[0].clientY;
    });

 使用clientX……时,必须要指明具体的touch对象,而不要直接指明数组。

event.touches[0]

在touchend事件处理函数中,当该事件发生时,touches里面已经没有任何的touch对象了,此时,就要使用changeTouches集合。

 

3.手势事件

gesturestart:当一个手指已经按在屏幕上,而另一个手指又触摸在屏幕时触发。

gesturechange:当触摸屏幕的任何一个手指的位置发生变化时触发。

gestureend:当任何一个手指从屏幕上面移开时触发。

【注意】只有两个手指都触摸到事件的接收容器时才触发这些手势事件。

 

4.触摸事件与手势事件之间的关系

①当一个手指放在屏幕上时,会触发touchstart事件,如果另一个手指又放在了屏幕上,则会触发gesturestart事件,随后触发基于该手指的touchstart事件。

②如果一个或两个手指在屏幕上滑动,将会触发gesturechange事件,但只要有一个手指移开,则会触发gestureend事件,紧接着又会触发toucheend事件。

 

5.手势的专有属性

①rotation:表示手指变化引起的旋转角度,负值表示逆时针,正值表示顺时针,从零开始。

②scale:表示两个手指之间的距离情况,向内收缩会缩短距离,这个值从1开始,并随距离拉大而增长。

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    JavaScript触摸与手势事件

    本知识点将围绕如何在Safari浏览器上开发兼容的网页内容展开,特别关注那些与JavaScript触摸与手势事件相关的部分。 首先,开发Safari网页内容需要遵循一系列的预设条件,比如使用标准技术、良好的网页设计实践、...

    JS触摸与手势事件详解

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

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

    触摸事件当然也是随着触屏的出现,用户使用最多的事件啦! 难道使用触屏事件后,其他原来的鼠标事件就都不能用啦?当然不是,只不过不是那么好用啊。 针对鼠标事件,有哪些不适应? dbclick 触屏设备不支持双击事件...

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

    而对于需要实现复杂手势的应用,如图片查看器或地图应用,则更倾向于使用触摸事件。 在给定的压缩包文件中,9.4可能是表示第9.4部分的内容,具体是关于单击事件和触摸事件的示例代码。通过阅读和分析这些代码,我们...

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

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

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

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

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

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

    reactnative触摸事件机制详解及高仿微信通讯录功能

    为了实现更丰富的交互,你可能还需要考虑触摸手势,如滑动、长按等。React Native的`PanResponder`模块可以帮助我们管理这些手势。例如,你可以创建一个`PanResponder`来监听用户的滑动操作,从而实现滚动通讯录的...

    JS中的触摸事件1

    JavaScript中的触摸事件(Touch Events)是为移动设备设计的,用于处理用户与触摸屏的交互。与传统的鼠标事件相比,触摸事件提供了更丰富的信息,能够处理多点触控。本篇主要探讨`touchstart`, `touchmove`, `...

    带手势缩放功能的pdf.js

    PDF.js 是一个由 Mozilla 团队开发的开源 JavaScript 库,用于在 Web 浏览器中渲染 PDF 文档。这个库旨在提供一种无插件的、跨平台的方式来查看 PDF 文件,充分利用现代浏览器的能力,提高用户体验。在这个特定的...

    手机触摸屏事件

    在手机等移动设备上,触摸屏已经成为主要的用户界面之一,支持多点触控、手势识别等功能,极大地丰富了用户的操作体验。 ### 触摸屏事件 触摸屏事件主要包括四种类型:`touchstart`、`touchmove`、`touchend`和`...

    触摸事件MDN例子

    MDN上的触摸事件示例可能包含了一个简单的HTML页面和对应的JavaScript代码,演示了如何监听并响应这些触摸事件。代码中可能包含了以下部分: - 使用`addEventListener`函数为元素绑定触摸事件监听器。 - 在事件处理...

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

    该压缩包中的"fingers.js-master"可能是一个JavaScript库,专门用于处理和识别各种触摸手势,如滑动(swipe)、捏合(pinch)、旋转(rotate)以及双击(double tap)等。这样的库通常会提供一套API,开发者可以方便...

    安卓与JS交互原理手势密码实现原理

    这可以通过监听触摸事件(`touchstart`、`touchmove`、`touchend`)来实现。 3. **识别算法**:识别用户绘制的手势与预设手势是否匹配是关键。一种常见的方法是计算两个路径之间的距离或相似度。例如,可以使用最小...

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

    总之,"使用JavaScript和HTML5进行手势识别"涉及到的技术主要包括HTML5的触摸事件API、手势识别算法以及可能的第三方库如"movement.js"。开发者可以利用这些工具和知识创建更具互动性的Web应用,提升用户体验。

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

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

    手机js手势放大缩放图片插件

    "手机js手势放大缩放图片插件"就是这样一个工具,它专为移动设备设计,旨在提升用户体验,让用户能够通过简单的触摸手势来放大和缩小网页中的图片。这篇文章将深入探讨这种插件的工作原理、实现方式以及其在实际开发...

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

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

Global site tag (gtag.js) - Google Analytics