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 相关文章推荐
超级酷和最实用的jQuery实例收集(20个)
Apr 21 Javascript
基于jQuery实现的文字按钮表单特效整理
Dec 07 Javascript
jQuery实现仿Alipay支付宝首页全屏焦点图切换特效
May 04 Javascript
js剪切板应用clipboardData实例解析
May 29 Javascript
javascript作用域、作用域链(菜鸟必看)
Jun 16 Javascript
js实现导航吸顶效果
Feb 24 Javascript
DVA框架统一处理所有页面的loading状态
Aug 25 Javascript
详解如何模拟实现node中的Events模块(通俗易懂版)
Apr 15 Javascript
JS数组方法concat()用法实例分析
Jan 18 Javascript
浅谈Vuex的this.$store.commit和在Vue项目中引用公共方法
Jul 24 Javascript
jdk1.8+vue elementui实现多级菜单功能
Sep 24 Javascript
微信小程序scroll-view不能左右滑动问题的解决方法
Jul 09 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中截取中文字符串的代码小结
2011/07/17 PHP
php中DOMElement操作xml文档实例演示
2013/03/26 PHP
CI框架验证码CAPTCHA辅助函数用法实例
2014/11/05 PHP
php生成短域名函数
2015/03/23 PHP
PHP中的命名空间详细介绍
2015/07/02 PHP
javascript cookies 设置、读取、删除实例代码
2010/04/12 Javascript
根据对象的某一属性进行排序的js代码(如:name,age)
2010/08/10 Javascript
JQuery EasyUI 日期控件如何控制日期选择区间
2014/05/05 Javascript
jQuery中:checkbox选择器用法实例
2015/01/03 Javascript
jQuery实现的淡入淡出二级菜单效果代码
2015/09/15 Javascript
js父页面中使用子页面的方法
2016/01/09 Javascript
基于Node.js的强大爬虫 能直接发布抓取的文章哦
2016/01/10 Javascript
JavaScript判断用户名和密码不能为空的实现代码
2016/05/16 Javascript
深入理解事件冒泡(Bubble)和事件捕捉(capture)
2016/05/28 Javascript
jQuery图片左右滚动代码 有左右按钮实例
2016/06/20 Javascript
移动端 一个简单易懂的弹出框
2016/07/06 Javascript
Angular2内置指令NgFor和NgIf详解
2016/08/03 Javascript
基于JavaScript表单脚本(详解)
2017/10/18 Javascript
Vue.js在数组中插入重复数据的实现代码
2017/11/17 Javascript
vue下拉刷新组件的开发及slot的使用详解
2020/12/23 Vue.js
python里对list中的整数求平均并排序
2014/09/12 Python
Python时间模块datetime、time、calendar的使用方法
2016/01/13 Python
Python按行读取文件的简单实现方法
2016/06/22 Python
python利用paramiko连接远程服务器执行命令的方法
2017/10/16 Python
python中的字符串内部换行方法
2018/07/19 Python
详解用python自制微信机器人,定时发送天气预报
2019/03/25 Python
python批量替换文件名中的共同字符实例
2020/03/05 Python
小白教你PyCharm从下载到安装再到科学使用PyCharm2020最新激活码
2020/09/25 Python
英国的屈臣氏:Boots博姿
2017/12/23 全球购物
澳大利亚手表品牌:Time IV Change
2018/10/06 全球购物
Right-on官方网站:日本知名的休闲服装品牌
2019/07/12 全球购物
奥巴马演讲稿
2014/01/08 职场文书
《狼》教学反思
2014/03/02 职场文书
党员廉洁自律承诺书
2014/05/26 职场文书
暑期学习心得体会
2014/09/02 职场文书
倡议书怎么写?
2019/04/11 职场文书