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显示时间 js显示最后修改时间
Jan 02 Javascript
js获取当前日期时间及其它日期操作汇总
Mar 08 Javascript
javascript HTML5 canvas实现打砖块游戏
Jun 18 Javascript
javascript运算符——位运算符全面介绍
Jul 14 Javascript
深入理解bootstrap框架之第二章整体架构
Oct 09 Javascript
JavaScript引用类型Array实例分析
Jul 24 Javascript
微信小程序 setData 对 data数据影响问题
Apr 18 Javascript
微信小程序 动态修改页面数据及参数传递过程详解
Sep 27 Javascript
vue和小程序项目中使用iconfont的方法
May 19 Javascript
浅谈js中的attributes和Attribute的用法与区别
Jul 16 Javascript
vue+elementUI动态增加表单项并添加验证的代码详解
Dec 17 Vue.js
聊聊JS ES6中的解构
Apr 29 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
分享下页面关键字抓取www.icbase.com站点代码(带asp.net参数的)
2014/01/30 PHP
php中实现xml与mysql数据相互转换的方法
2014/12/25 PHP
Codeigniter的一些优秀特性总结
2015/01/21 PHP
PHP实现多图上传(结合uploadify插件)思路分析
2016/11/30 PHP
tp5(thinkPHP5框架)时间查询操作实例分析
2019/05/29 PHP
CentOS7系统搭建LAMP及更新PHP版本操作详解
2020/03/26 PHP
十分钟打造AutoComplete自动完成效果代码
2009/12/26 Javascript
ie8 不支持new Date(2012-11-10)问题的解决方法
2013/07/31 Javascript
Javascript之String对象详解
2016/06/08 Javascript
jQuery实现简单倒计时功能的方法
2016/07/04 Javascript
浅谈js数据类型判断与数组判断
2016/08/29 Javascript
微信小程序 input输入框控件详解及实例(多种示例)
2016/12/14 Javascript
Angularjs 依赖压缩及自定义过滤器写法
2017/02/04 Javascript
详解vue express启动数据服务
2017/07/05 Javascript
JavaScript实现移动端带transition动画的轮播效果
2020/03/24 Javascript
基于Vue sessionStorage实现保留搜索框搜索内容
2020/06/01 Javascript
微信小程序学习总结(三)条件、模板、文件引用实例分析
2020/06/04 Javascript
[02:04]2014DOTA2国际邀请赛 BBC小组赛第三天总结
2014/07/12 DOTA
python实现简易通讯录修改版
2018/03/13 Python
python3 打开外部程序及关闭的示例
2018/11/06 Python
使用批处理脚本自动生成并上传NuGet包(操作方法)
2019/11/19 Python
jupyter notebook运行命令显示[*](解决办法)
2020/05/18 Python
中外合拍动画首获奥斯卡提名,“上海出品”《飞奔去月球》能否拿下最终大奖?
2021/03/16 国漫
HTML5+JS实现俄罗斯方块原理及具体步骤
2013/11/29 HTML / CSS
巴西最大的家电和百货零售商:Casas Bahia
2016/11/22 全球购物
兰蔻法国官方网站:Lancôme法国
2020/02/22 全球购物
GWT都有什么特性
2016/12/02 面试题
交通专业个人自荐信格式
2013/09/23 职场文书
销售助理岗位职责
2014/02/21 职场文书
村干部承诺书
2014/03/28 职场文书
应届毕业生求职信
2014/05/26 职场文书
市场营销专业应届生自荐信
2014/06/19 职场文书
人力资源管理专业自荐信
2014/06/24 职场文书
小学生放飞梦想演讲稿
2014/08/26 职场文书
SpringBoot 整合mongoDB并自定义连接池的示例代码
2022/02/28 MongoDB
微软Win11 全新照片应用面向 Dev预览版推出 新版本上手体验图集
2022/09/23 数码科技