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中DOM详解
Apr 13 Javascript
jQuery ui autocomplete选择列表被Bootstrap模态窗遮挡的完美解决方法
Sep 23 Javascript
Javascript同时声明一连串(多个)变量的方法
Jan 23 Javascript
js实现图片懒加载效果
Jul 17 Javascript
JS数组操作之增删改查的简单实现
Aug 21 Javascript
浅谈angular.copy() 深拷贝
Sep 14 Javascript
JS实现利用两个队列表示一个栈的方法
Dec 13 Javascript
vue使用axios时关于this的指向问题详解
Dec 22 Javascript
Element Table的row-class-name无效与动态高亮显示选中行背景色
Nov 30 Javascript
JS图片预加载三种实现方法解析
May 08 Javascript
浅谈vue中get请求解决传输数据是数组格式的问题
Aug 03 Javascript
记一次vue跨域的解决
Oct 21 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
PHP5中的this,self和parent关键字详解教程
2007/03/19 PHP
php 搜索框提示(自动完成)实例代码
2012/02/05 PHP
PHP加密扩展库Mcrypt安装和实例
2013/11/10 PHP
PHP基于yii框架实现生成ICO图标
2015/11/13 PHP
PHP判断用户是否已经登录(跳转到不同页面或者执行不同动作)
2016/09/22 PHP
php与python实现的线程池多线程爬虫功能示例
2016/10/12 PHP
超级强大的表单验证
2006/06/26 Javascript
JavaScript脚本性能优化注意事项
2008/11/18 Javascript
window.location和document.location的区别分析
2008/12/23 Javascript
jQuery插件开发详细教程
2014/06/06 Javascript
asp.net+jquery.form实现图片异步上传的方法(附jquery.form.js下载)
2016/05/05 Javascript
第一次接触神奇的Bootstrap基础排版
2016/07/26 Javascript
jQuery Validate插件实现表单验证
2016/08/19 Javascript
浅谈Angular中ngModel的$render
2016/10/24 Javascript
微信小程序 video详解及简单实例
2017/01/16 Javascript
AngularJS中下拉框的基本用法示例
2017/10/11 Javascript
基于vue2.0实现简单轮播图
2017/11/27 Javascript
Vue项目中最新用到的一些实用小技巧
2018/11/06 Javascript
4 种滚动吸顶实现方式的比较
2019/04/09 Javascript
vue 组件中使用 transition 和 transition-group实现过渡动画
2019/07/09 Javascript
Vue基于iview table展示图片实现点击放大
2020/08/05 Javascript
Openlayers显示地理位置坐标的方法
2020/09/28 Javascript
使用vue3重构拼图游戏的实现示例
2021/01/25 Vue.js
Python使用 Beanstalkd 做异步任务处理的方法
2018/04/24 Python
python获取代码运行时间的实例代码
2018/06/11 Python
对Python通过pypyodbc访问Access数据库的方法详解
2018/10/27 Python
Python实现字符串匹配的KMP算法
2019/04/04 Python
pyqt5 获取显示器的分辨率的方法
2019/06/18 Python
python 代码运行时间获取方式详解
2020/09/18 Python
英国电子产品购物网站:TobyDeals
2018/07/30 全球购物
英国护发和美妆在线商店:Klip Shop
2019/03/24 全球购物
体育教师工作总结的自我评价
2013/10/10 职场文书
手机被没收检讨书
2014/02/22 职场文书
民间借贷纠纷案件代理词
2015/05/26 职场文书
运动会主持人开幕词
2016/03/04 职场文书
用Python实现Newton插值法
2021/04/17 Python