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 相关文章推荐
Mootools 1.2教程 定时器和哈希简介
Sep 15 Javascript
js 字符串转化成数字的代码
Jun 29 Javascript
javascript实现可改变滚动方向的无缝滚动实例
Jun 17 Javascript
JavaScript转换与解析JSON方法实例详解
Nov 24 Javascript
js添加绑定事件的方法
May 15 Javascript
js多功能分页组件layPage使用方法详解
May 19 Javascript
Javascript计算二维数组重复值示例代码
Dec 18 Javascript
js实现贪吃蛇小游戏(容易理解)
Jan 22 Javascript
使用jQuery实现购物车结算功能
Aug 15 jQuery
学习JS中的DOM节点以及操作
Apr 30 Javascript
用Vue.js在浏览器中实现裁剪图像功能
Jun 18 Javascript
vue 中固定导航栏的实例代码
Nov 01 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
农民和部队如何穿矿
2020/03/04 星际争霸
php 全局变量范围分析
2009/08/07 PHP
简单了解WordPress开发中update_option()函数的用法
2016/01/11 PHP
win10 apache配置虚拟主机后localhost无法使用的解决方法
2018/01/27 PHP
ajax 文件上传应用简单实现
2009/03/03 Javascript
IE6下CSS图片缓存问题解决方法
2010/12/09 Javascript
基于OO的动画附加插件,可以实现弹跳、渐隐等动画效果 分享
2013/06/24 Javascript
最短的IE判断var ie=!-[1,]分析
2014/05/28 Javascript
javascript学习笔记(二)数组和对象部分
2014/09/30 Javascript
JavaScript中的方法重载实例
2015/03/16 Javascript
JavaScript通过HTML的class来获取HTML元素的方法总结
2016/05/24 Javascript
Bootstrap CSS布局之代码
2016/12/17 Javascript
js中json对象和字符串的理解及相互转化操作实现方法
2017/09/22 Javascript
JS生成随机打乱数组的方法示例
2017/12/23 Javascript
vue导出html、word和pdf的实现代码
2018/07/31 Javascript
jQuery zTree插件快速实现目录树
2019/08/16 jQuery
JS实现json数组排序操作实例分析
2019/10/28 Javascript
JS如何实现网站中PC端和手机端自动识别并跳转对应的代码
2020/01/08 Javascript
JS document文档的简单操作完整示例
2020/01/13 Javascript
vue实现信息管理系统
2020/05/30 Javascript
vue+elementUI(el-upload)图片压缩,默认同比例压缩操作
2020/08/10 Javascript
python字符串加密解密的三种方法分享(base64 win32com)
2014/01/19 Python
解决python3中cv2读取中文路径的问题
2018/12/05 Python
Django在admin后台集成TinyMCE富文本编辑器的例子
2019/08/09 Python
Python3并发写文件与Python对比
2019/11/20 Python
使用pytorch完成kaggle猫狗图像识别方式
2020/01/10 Python
多个python文件调用logging模块报错误
2020/02/12 Python
校园奶茶店创业计划书
2014/01/23 职场文书
电脑销售顾问自荐信
2014/01/29 职场文书
《孔繁森》教学反思
2014/04/17 职场文书
对照检查剖析材料
2014/09/30 职场文书
2014年社团工作总结范文
2014/11/27 职场文书
初中教师德育工作总结2015
2015/05/12 职场文书
高中议论文(范文2篇)
2019/08/19 职场文书
解决linux下redis数据库overcommit_memory问题
2022/02/24 Redis
MySQL 计算连续登录天数
2022/05/11 MySQL