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带按钮的提示框可供选择示例代码
Sep 17 Javascript
JS实现的生成随机数的4个函数分享
Feb 11 Javascript
JavaScript获取图片像素颜色并转换为box-shadow显示
Mar 11 Javascript
利用js获取下拉框中所选的值
Dec 01 Javascript
利用js+css+html实现固定table的列头不动
Dec 08 Javascript
jQuery实现二维码扫描功能
Jan 09 Javascript
vue使用vue-cli快速创建工程
Jul 28 Javascript
9种改善AngularJS性能的方法
Nov 28 Javascript
浅谈微信小程序之官方UI框架we-ui使用教程
Aug 20 Javascript
JS原形与原型链深入详解
May 09 Javascript
微信小程序返回上一级页面的实现代码
Jun 19 Javascript
原生JavaScript实现购物车
Jan 10 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
如何在PHP中进行身份认证
2006/10/09 PHP
执行、获取远程代码返回:file_get_contents 超时处理的问题详解
2013/06/25 PHP
codeigniter集成ucenter1.6双向通信的解决办法
2014/06/12 PHP
Apache无法自动跳转却显示目录的解决方法
2020/11/30 PHP
Thinkphp开发--集成极光推送
2017/09/15 PHP
判断脚本加载是否完成的方法
2009/05/26 Javascript
不一样的文字闪烁 轮番闪烁
2009/11/11 Javascript
jQuery多级联动下拉插件chained用法示例
2016/08/20 Javascript
微信小程序 五星评分(包括半颗星评分)实例代码
2016/12/14 Javascript
canvas实现图像放大镜
2017/02/06 Javascript
JavaScript Drum Kit 指南(纯 JS 模拟敲鼓效果)
2017/07/23 Javascript
vue.js异步上传文件前后端实现代码
2017/08/22 Javascript
微信小程序用户信息encryptedData详解
2018/08/24 Javascript
微信小程序生成二维码的示例代码
2019/03/29 Javascript
vue权限问题的完美解决方案
2019/05/08 Javascript
Python中的heapq模块源码详析
2019/01/08 Python
PyQt5基本控件使用之消息弹出、用户输入、文件对话框的使用方法
2019/08/06 Python
对Tensorflow中Device实例的生成和管理详解
2020/02/04 Python
selenium WebDriverWait类等待机制的实现
2020/03/18 Python
浅谈Keras中shuffle和validation_split的顺序
2020/06/19 Python
python自动打开浏览器下载zip并提取内容写入excel
2021/01/04 Python
用纯css3和html制作泡沫对话框实现代码
2013/03/21 HTML / CSS
详解如何解决H5开发使用wx.hideMenuItems无效果不生效
2021/01/20 HTML / CSS
Lentiamo荷兰:在线订购隐形眼镜、隐形眼镜液和太阳镜
2019/10/25 全球购物
建筑人员岗位职责
2013/12/25 职场文书
新员工入职感言
2014/02/01 职场文书
《九色鹿》教学反思
2014/02/27 职场文书
贯彻学习两会心得体会范文
2014/03/17 职场文书
大四毕业生自荐书
2014/07/05 职场文书
学雷锋标兵事迹材料
2014/08/18 职场文书
2014校长四风问题对照检查材料思想汇报
2014/09/16 职场文书
用人单位聘用意向书
2015/05/11 职场文书
2016年优秀少先队员事迹材料
2016/02/26 职场文书
Nginx访问日志及错误日志参数说明
2021/03/31 Servers
Python中相见恨晚的技巧
2021/04/13 Python
详解CSS伪元素的妙用单标签之美
2021/05/25 HTML / CSS