jQuery移动页面开发中的触摸事件与虚拟鼠标事件简介


Posted in Javascript onDecember 03, 2015

触摸事件(touch)
在 jQuery Mobile 中有一些触摸事件是可定制的。然而,这些事件仅当与支持触摸功能的设备进行交互的用户访问您的 jQuery Mobile 网站时才可用。当这些事件可用时,您可以触发任何自定义java script 作为对五种不同的事件的响应tap、taphold、swipe、swipeleft 和 swiperight。

tap(轻击):一次快速完整的轻击后触发

taphold(轻击不放):轻击并不放(大约一秒)后触发

swipe(滑动):一秒内水平拖拽大于30PX,或者纵向拖曳小于20px的事件发生时触发的事件。多长时间拖拽多少px可以设置的。这个事件有其相关联的属性,分别为

scrollSupressionThreshold (默认: 10px) ? 水平方向拖拽大于这个值,将不触发。
durationThreshold (默认: 1000ms) ? 滑动时间超过这个数值就不会产生滑动事件。
horizontalDistanceThreshold (默认: 30px) ? 水平划动距离超过这个数值才会产生滑动事件。
verticalDistanceThreshold (默认: 75px) ? 竖直划动距离小于这个数值才会产生滑动事件。
swipeleft(左划):划动事件为向左的方向时触发

swiperight(右划):划动事件为向右的方向时触发

 

要绑定这些事件,只需要在document.ready()中进行编程即可,如下代码示例:

<!DOCTYPE HTML>
<html>
<head>
 <title>Understanding the jQuery Mobile API</title>
 <link rel="stylesheet" href="jquery.mobile.css" />
 <script src="jquery.js"></script>
 <script type="text/java script">
  $(document).ready(function(){
   $(".tap-hold-test").bind("taphold", function(event) {
    $(this).html("Tapped and held");
   }); 
  });
 </script>
 <script src="jquery.mobile.js"></script>
</head>

<body>
 <div data-role="page" id="my-page">
  <div data-role="header">
      <h1>Header</h1>
    </div>
    <div data-role="content">
      <ul data-role="listview" id="my-list">
        <li class="tap-hold-test">Tap and hold test</li>
      </ul>
  </div>
 </div>
</body>
</html>

从上面的代码可以看到,将一个list列表跟taphold事件进行了绑定,当DOM加载完毕后,当触发taphold事件后,就会显示Tapped and held的提示信息。

虚拟鼠标事件
我们提供了一系列"虚拟的"鼠标事件试图把鼠标和触摸事件抽象 出来。这使得开发者能够给一些基础的鼠标事件,例如mousedown, mousemove, mouseup, 和click来注册监听。插件会在触摸环境中,插件会保持在传统鼠标环境下触发的顺序,例如:vmouseup总是在vmousedown之前被触发,vmousedown总是在 vmouseup 之前,等等。虚拟鼠标事件也会把书剑中放出的坐标信 息标准化。所以在基于触摸的设备中事件对象的pageX, pageY, screenX, screenY, clientX, and clientY这些属性的坐标都可以用。

vmouseover:处理touch 或者 mouseover的正规化的事件

vmousedown:处理touchstart 或者 mousedown 的正规化的事件

vmousemove:处理touchmove 或者 mousemove 的正规化的事件

vmouseup:处理touchend 或者 mouseup 的正规化的事件

vclick:处理touchend 或者 鼠标点击 的正规化的事件。在基于触摸的设备上,这个事件是在vmouseup事件之后触发的。

vmousecancel:处理touch 或者 mouse 的mousecancel的正规化的事件

警告:小心使用vclick
小心在触摸设备使用vclick。Webkit内核的浏览器会在touchend事 件触发后300ms自己生成mousedown, mouseup,和click 3个事件。 这些生成的鼠标事件的目标会在他们触发的时候被计算出来,并且 是基于touch事件的位置,并且有些情况下会在不同的设备上甚至 相同设备的不同OS会导致不同的计算结果。这就意味着原始的点击 事件的目标语浏览器自己生成的鼠标事件的目标元素可能不是同一个。
我们建议在触摸后可能会改变你点击的点下面内容的事件中,使用 click而不是vclick方法。这样的事件包括页面转场和其他的一些行为比如 收缩/伸展 这样 的 可能会导致屏幕有变化或者内容完全被替换的事件。

取消一个元素默认点击的行为
应用会调用一个 vclick 事件来取消某个元素的默认点击事件。在 基于鼠标的设备上,对vclick事件调用preventDefault()方法等同 于对真实点击的时间冒泡阶段调用 preventDefault() 方法。在基 于触摸的设备上就有点复杂了,因为真实的点击事件会在vclick 事件触发300毫秒之后触发。对于触摸设备,对vclick事件调用 preventDefault()方法会一些vmouse插件的一些代码来试图捕获下 一个点击事件。所以根据上述的警告,要匹配一个触摸事件和与他 对应的鼠标事件就比较困难,因为他们的目标是不同的。所以 vmouse插件试图通过坐标来识别一个相符的点击事件通常会失败。
有些情况下两个事件的目标和坐标的识别都会失败,这样就会导致 点击事件被触发或者元素的默认动作会被执行,或者内容被改变或 者替换的情况下,触发了别的元素的点击事件。如果这样的bug在给定的元素上有规律的发生,我们建议对于动作使 用click来驱动触发。

Javascript 相关文章推荐
js获取及修改网页背景色和字体色的方法
Dec 29 Javascript
在AngularJS中如何使用谷歌地图把当前位置显示出来
Jan 25 Javascript
Hammer.js+轮播原理实现简洁的滑屏功能
Feb 02 Javascript
神奇!js+CSS+DIV实现文字颜色渐变效果
Mar 16 Javascript
js实现可输入可选择的select下拉框
Dec 21 Javascript
AngularJS入门示例之Hello World详解
Jan 04 Javascript
vue按需加载组件webpack require.ensure的方法
Dec 13 Javascript
详解javascript中的Error对象
Apr 25 Javascript
Jquery ajax书写方法代码实例解析
Jun 12 jQuery
vue pages 多入口项目 + chainWebpack 全局引用缩写说明
Sep 21 Javascript
JS实现放大镜效果
Sep 21 Javascript
vue的webcamjs集成方式
Nov 16 Javascript
详解JavaScript对象和数组
Dec 03 #Javascript
java必学必会之static关键字
Dec 03 #Javascript
详解页面滚动值scrollTop在FireFox与Chrome浏览器间的兼容问题
Dec 03 #Javascript
继续学习javascript闭包
Dec 03 #Javascript
解决js页面滚动效果scrollTop在FireFox与Chrome浏览器间的兼容问题的方法
Dec 03 #Javascript
jQuery 1.9.1源码分析系列(十五)之动画处理
Dec 03 #Javascript
ztree获取选中节点时不能进入可视区域出现BUG如何解决
Dec 03 #Javascript
You might like
thinkphp连贯操作实例分析
2014/11/22 PHP
php实现通过cookie换肤的方法
2015/07/13 PHP
php-fpm服务启动脚本的方法
2018/04/27 PHP
浅谈laravel数据库查询返回的数据形式
2019/10/21 PHP
yii框架结合charjs统计上一年与当前年数据的方法示例
2020/04/04 PHP
Prototype使用指南之hash.js
2007/01/10 Javascript
jquery 圆形旋转图片滚动切换效果
2011/01/19 Javascript
JavaScript之HTMLCollection接口代码
2011/04/27 Javascript
IE与Firefox在JavaScript上的7个不同句法分享
2011/10/30 Javascript
js当一个变量为函数时 应该注意的一点细节小结
2011/12/29 Javascript
javascript学习笔记(五) Array 数组类型介绍
2012/06/19 Javascript
JavaScript实现的字符串replaceAll函数代码分享
2015/04/02 Javascript
jquery分割字符串的方法
2015/06/24 Javascript
Jquery 1.9.1源码分析系列(十二)之筛选操作
2015/12/02 Javascript
详解JS去重及字符串奇数位小写转大写
2016/12/29 Javascript
基于js粘贴事件paste简单解析以及遇到的坑
2017/09/07 Javascript
Bootstrap Table列宽拖动的方法
2018/08/15 Javascript
基于layui的下拉列表的数据回显方法
2019/09/24 Javascript
p5.js实现故宫橘猫赏秋图动画
2019/10/23 Javascript
vue动态设置页面title的方法实例
2020/08/23 Javascript
Python lxml模块安装教程
2015/06/02 Python
Django 缓存配置Redis使用详解
2019/07/23 Python
Python实现Restful API的例子
2019/08/31 Python
Python openpyxl读取单元格字体颜色过程解析
2019/09/03 Python
解决TensorFlow训练内存不断增长,进程被杀死问题
2020/02/05 Python
python实现拼图小游戏
2020/02/22 Python
python 多线程死锁问题的解决方案
2020/08/25 Python
配件采购员岗位职责
2013/12/03 职场文书
葡萄牙语专业个人求职信
2013/12/10 职场文书
《世界多美呀》教学反思
2014/03/02 职场文书
大四学生找工作的自荐信
2014/03/27 职场文书
婚礼新人答谢词
2015/01/04 职场文书
长城导游词300字
2015/01/30 职场文书
2015年宣传部工作总结范文
2015/03/31 职场文书
关于React Native使用axios进行网络请求的方法
2021/08/02 Javascript
win10壁纸在哪个文件夹 win10桌面背景图片文件位置分享
2022/08/05 数码科技