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 相关文章推荐
JavaScript 获取事件对象的注意点
Jul 29 Javascript
ext 代码生成器
Aug 07 Javascript
关于eval 与new Function 到底该选哪个?
Apr 17 Javascript
jQuery插件imgPreviewQs实现上传图片预览
Jan 15 Javascript
JS利用cookies设置每隔24小时弹出框
Apr 20 Javascript
微信小程序 空白页重定向解决办法
Jun 27 Javascript
vue中的非父子间的通讯问题简单的实例代码
Jul 19 Javascript
JQuery 又谈ajax局部刷新
Nov 27 jQuery
浅谈 vue 中的 watcher
Dec 04 Javascript
js中url对象化管理分析
Dec 29 Javascript
使用Vue实现移动端左滑删除效果附源码
May 16 Javascript
浅谈鸿蒙 JavaScript GUI 技术栈
Sep 17 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
DC游戏Steam周三特惠 《蝙蝠侠》阿卡姆系列平史低
2020/04/09 欧美动漫
PHP求最大子序列和的算法实现
2011/06/24 PHP
QQ互联一键登录审核不通过的解决方案
2014/09/10 PHP
Yii中创建自己的Widget实例
2016/01/05 PHP
jQuery插件jQuery-JSONP开发ajax调用使用注意事项
2013/11/22 Javascript
javascript获取网页各种高宽及位置的方法总结
2016/07/27 Javascript
form+iframe解决跨域上传文件的方法
2016/11/18 Javascript
基于Bootstrap 3 JQuery及RegExp的表单验证功能
2017/02/16 Javascript
Vue组件化开发思考
2018/02/02 Javascript
Vue 2.5.2下axios + express 本地请求404的解决方法
2018/02/21 Javascript
详解基于mpvue的小程序markdown适配解决方案
2018/05/08 Javascript
详解使用VueJS开发项目中的兼容问题
2018/08/02 Javascript
JavaScript作用域、闭包、对象与原型链概念及用法实例总结
2018/08/20 Javascript
基于Angularjs-router动态改变Title值的问题
2018/08/30 Javascript
vue2.0 可折叠列表 v-for循环展示的实例
2018/09/07 Javascript
Vue异步组件处理路由组件加载状态的解决方案
2018/09/07 Javascript
关于JavaScript中异步/等待的用法与理解
2020/11/18 Javascript
python编写网页爬虫脚本并实现APScheduler调度
2014/07/28 Python
Python使用Scrapy爬取妹子图
2015/05/28 Python
详解Python网络爬虫功能的基本写法
2016/01/28 Python
Python用模块pytz来转换时区
2016/08/19 Python
详解 Python 读写XML文件的实例
2017/08/02 Python
使用apidocJs快速生成在线文档的实例讲解
2018/02/07 Python
Python中判断输入是否为数字的实现代码
2018/05/26 Python
python安装pil库方法及代码
2019/06/25 Python
python实现通过flask和前端进行数据收发
2019/08/22 Python
python实现文件批量编码转换及注意事项
2019/10/14 Python
一文了解python 3 字符串格式化 F-string 用法
2020/03/04 Python
美国网上订购鲜花:FTD
2016/09/23 全球购物
澳大利亚家用电器在线商店:Billy Guyatts
2020/05/05 全球购物
生物技术毕业生自荐信
2013/10/23 职场文书
通信工程毕业生求职信
2013/11/16 职场文书
消防器材管理制度
2014/01/28 职场文书
小学开学典礼主持词
2014/03/19 职场文书
悬崖上的金鱼姬观后感
2015/06/15 职场文书
Centos7 Shell编程之正则表达式、文本处理工具详解
2022/08/05 Servers