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 相关文章推荐
妙用Jquery的val()方法
Jun 27 Javascript
js实现简洁的TAB滑动门效果代码
Sep 06 Javascript
谈谈JavaScript类型系统之Math
Jan 06 Javascript
深入解析Backbone.js框架的依赖库Underscore.js的作用
May 07 Javascript
vue组件Prop传递数据的实现示例
Aug 17 Javascript
使用Vue动态生成form表单的实例代码
Apr 26 Javascript
Nuxt v-bind绑定img src不显示的解决
Dec 05 Javascript
vue内置组件component--通过is属性动态渲染组件操作
Jul 28 Javascript
VUE : vue-cli中去掉路由中的井号#操作
Sep 04 Javascript
Vue实现简单计算器
Jan 20 Vue.js
使用PDF.js渲染canvas实现预览pdf的效果示例
Apr 17 Javascript
springboot+VUE实现登录注册
May 27 Vue.js
详解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
PHP 验证码不显示只有一个小红叉的解决方法
2013/09/30 PHP
再Docker中架设完整的WordPress站点全攻略
2015/07/29 PHP
Yii2使用swiftmailer发送邮件的方法
2016/05/03 PHP
PHP水印类,支持添加图片、文字、填充颜色区域的实现
2017/02/04 PHP
javascript的事件触发器介绍的实现
2014/06/05 Javascript
js实现鼠标经过表格行变色的方法
2015/05/12 Javascript
在JavaScript的jQuery库中操作AJAX的方法讲解
2015/08/15 Javascript
seajs模块之间依赖的加载以及模块的执行
2016/10/21 Javascript
基于JavaScript实现淘宝商品广告效果
2017/08/10 Javascript
Angularjs中数据绑定的实例详解
2017/08/25 Javascript
分析javascript中9 个常见错误阻碍你进步
2017/09/18 Javascript
jQuery实现文字超过1行、2行或规定的行数时自动加省略号的方法
2018/03/28 jQuery
微信小程序实现自定义加载图标功能
2018/07/19 Javascript
Vue.js获取被选择的option的value和text值方法
2018/08/24 Javascript
Vant的安装和配合引入Vue.js项目里的方法步骤
2018/12/05 Javascript
Element图表初始大小及窗口自适应实现
2020/07/10 Javascript
vue $mount 和 el的区别说明
2020/09/11 Javascript
vue实现抽屉弹窗效果
2020/11/15 Javascript
jQuery实现手风琴特效
2021/01/11 jQuery
[41:54]2018DOTA2亚洲邀请赛 4.1 小组赛A组加赛 TNC vs Liquid
2018/04/03 DOTA
Python标准库sched模块使用指南
2017/07/06 Python
pandas删除指定行详解
2019/04/04 Python
pycharm new project变成灰色的解决方法
2019/06/27 Python
TensorFlow基本的常量、变量和运算操作详解
2020/02/03 Python
基于Python实现粒子滤波效果
2020/12/01 Python
iostream与iostream.h的区别
2015/01/16 面试题
物流专业大学生求职信范文
2013/10/28 职场文书
招商业务员岗位职责
2013/12/16 职场文书
院领导写的就业推荐信
2014/03/09 职场文书
政府门卫岗位职责
2014/04/29 职场文书
毕业设计指导教师评语
2014/12/30 职场文书
拾金不昧感谢信范文
2015/01/21 职场文书
工程合作意向书范本
2015/05/09 职场文书
房屋产权证明书
2015/06/19 职场文书
Mysql MVCC机制原理详解
2021/04/20 MySQL
vue使用echarts实现折线图
2022/03/21 Vue.js