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


Posted in Javascript onMay 04, 2017

触屏已经是我们身边电子设备的常态了。触摸事件当然也是随着触屏的出现,用户使用最多的事件啦!
难道使用触屏事件后,其他原来的鼠标事件就都不能用啦?当然不是,只不过不是那么好用啊。

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

dbclick

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

可以通过在head标签内加上这么一行:

<meta name="viewport" content="width=device-width, minimum-scale=1.0,maximum-scale=1.0,user-scalable=no">

可以实现,我们编写的页面不会随着用的手势而放大缩小。

关于meta标签,我还没有研究过,罪过啊。

mouse

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

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

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

触摸事件

该类事件会在用户手指放在屏幕上面时,在屏幕上滑动时,或从屏幕上移开时触发。具体来说有以下几个触摸事件。
1、touchstart

当手指放在屏幕上触发。

2、touchmove

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

3、touchend

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

4、touchcancel

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

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

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

除了常用的DOM属性,触摸事件还包含下列三个用于跟踪触摸的属性。
1、touches:表示当前跟踪的触摸操作的touch对象的数组。

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

当两个手指在触屏上时,event.touches.length=2,以此类推。
2、targetTouches:特定于事件目标的touch对象数组。

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

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

每个touch对象都包含下列几个属性:
4、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集合。

手势事件

  1. gesturestart:当一个手指已经按在屏幕上,而另一个手指又触摸在屏幕时触发。
  2. gesturechange:当触摸屏幕的任何一个手指的位置发生变化时触发。
  3. gestureend:当任何一个手指从屏幕上面移开时触发。

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

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

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

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

手势的专有属性

  1. rotation:表示手指变化引起的旋转角度,负值表示逆时针,正值表示顺时针,从零开始。
  2. scale:表示两个手指之间的距离情况,向内收缩会缩短距离,这个值从1开始,并随距离拉大而增长。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JS继承 笔记
Jul 13 Javascript
利用JS实现浏览器的title闪烁
Jul 08 Javascript
document.execCommand()的用法小结
Jan 08 Javascript
javascript实现分栏显示小技巧附图
Oct 13 Javascript
解决Jquery向页面append新元素之后事件的绑定问题
Mar 16 Javascript
浅谈angularJS 作用域
Jul 05 Javascript
jQuery中使用animate自定义动画的方法
May 29 Javascript
js代码实现下拉菜单【推荐】
Dec 15 Javascript
JavaScript定义全局对象的方法示例
Jan 12 Javascript
ES6基础之数组和对象的拓展实例详解
Aug 22 Javascript
vuex 多模块时 模块内部的mutation和action的调用方式
Jul 24 Javascript
解决Vue keep-alive 调用 $destory() 页面不再被缓存的情况
Oct 30 Javascript
详解Angular 4.x Injector
May 04 #Javascript
详解Vue中使用v-for语句抛出错误的解决方案
May 04 #Javascript
详解Node.js串行化流程控制
May 04 #Javascript
纯原生js实现贪吃蛇游戏
Apr 16 #Javascript
js调用刷新界面的几种方式
May 03 #Javascript
JavaScript中双向数据绑定详解
May 03 #Javascript
Js实现中国公民身份证号码有效性验证实例代码
May 03 #Javascript
You might like
PHP缓存技术的多种方法小结
2012/08/14 PHP
destoon整合ucenter后注册页面不跳转的解决方法
2014/06/21 PHP
基于Laravel-admin 后台的自定义页面用法详解
2019/09/30 PHP
PHP与SQL语句写一句话木马总结
2019/10/11 PHP
jquery.ui.draggable中文文档
2009/11/24 Javascript
JQuery入门——事件切换之hover()方法应用介绍
2013/02/05 Javascript
Javascript中查找不以XX字符结尾的单词示例代码
2013/10/15 Javascript
js和jquery中循环的退出和继续学习记录
2014/09/06 Javascript
ECMAScript 5中的属性描述符详解
2015/03/02 Javascript
关于JS中prototype的理解
2015/09/07 Javascript
Bootstrap和Java分页实例第一篇
2016/12/23 Javascript
javascript实现页面滚屏效果
2017/01/17 Javascript
js通过keyCode值判断单击键盘上某个键,然后触发指定的事件方法
2017/02/19 Javascript
JavaScript日期工具类DateUtils定义与用法示例
2018/09/03 Javascript
详解Vue内部怎样处理props选项的多种写法
2018/11/06 Javascript
vue + typescript + 极验登录验证的实现方法
2019/06/27 Javascript
小程序如何获取多个formId实现详解
2019/09/20 Javascript
详解如何在Vue项目中发送jsonp请求
2019/10/25 Javascript
node解析修改nginx配置文件操作实例分析
2019/11/06 Javascript
使用Node.js实现base64和png文件相互转换的方法
2020/03/11 Javascript
跟老齐学Python之集合的关系
2014/09/24 Python
Python中zfill()方法的使用教程
2015/05/20 Python
NumPy 如何生成多维数组的方法
2018/02/05 Python
使用Anaconda3建立虚拟独立的python2.7环境方法
2018/06/11 Python
对Pandas DataFrame缺失值的查找与填充示例讲解
2018/11/06 Python
selenium+python自动化测试环境搭建步骤
2019/06/03 Python
tensorflow多维张量计算实例
2020/02/11 Python
Python django框架 web端视频加密的实例详解
2020/11/20 Python
HTML5实现视频弹幕功能
2019/08/09 HTML / CSS
原装进口全世界:天猫国际
2016/08/03 全球购物
自学考试自我鉴定范文
2013/09/26 职场文书
汽车检测与维修应届毕业生求职信
2013/10/19 职场文书
支部书记四风对照材料
2014/08/28 职场文书
习近平在党的群众路线教育实践活动总结大会上的讲话全文
2014/10/25 职场文书
学生不参加考试检讨书
2015/02/19 职场文书
地球一小时活动总结
2015/02/27 职场文书