jQuery基于$.ajax设置移动端click超时处理方法


Posted in Javascript onMay 14, 2016

本文实例讲述了jQuery基于$.ajax设置移动端click超时处理方法。分享给大家供大家参考,具体如下:

这里介绍jquery click事件如何在移动端自动转换成touchstart事件。

因为移动端click事件会比touchstart事件慢几拍

移动设备某个元素上事件执行顺序是:

touchstart

touchmove

touchend

click{mousedown->mousemove->mouseup}

click事件在移动设备上虽然会识别但却是最后一个执行的,所以如果不把click事件换成touchstart事件的话,就可能造成延时导致交互上也慢了几拍

所以在移动端最好把click事件换成touchstart事件。

那么如何添加事件比较简单呢.

于是乎有了以下这种写法:

var handle = function (e) {
e.preventDefault(); // 阻止浏览器默认行为

alert('fuck world');
}
$('body').on('touchstart mousedown', handle );

这样在pc端浏览器上面alert只执行一次,触发的事件是mousedown

在ios设备safari浏览器上面alert也只执行一次,触发的事件是touchstart

为什么只执行一次?

秘密在于当执行的是touchstart后,preventDefault掉了后面的click就不执行了,“非常完美”.

^_^! 一如既往的android设备蛋疼是必须的,测试发现除qq浏览器外其它浏览器都会alert两次

也就是说touchstart和mousedown的handle函数都执行了, 似乎是e.preventDefault()没有起作用。具体原因不明...

因为要兼容,所以就没办法了只能通过判断是否支持touch事件来分别添加事件了..

那就扩展一个jquery方法插件吧仿一个on方法的插件方法比如名称为quickOn,(如果你连on方法怎么用都不知道,那你就走吧,离开这里...)

;(function(){
  var isTouch = ('ontouchstart' in document.documentElement) ? 'touchstart' : 'click';
 if(!$.fn.quickOn){
   $.fn.quickOn= function(){
    arguments[0] = (arguments[0] === 'click') ? isTouch: arguments[0];
    return $.fn.on.apply(this, arguments);
   };
  }
})();

quickOn虽然名字尴尬了一点,但是能用,例如:

$('body').quickOn('click', function(){
 alert('fuck world') ;
})

额。。后来想想,为什么不直接重载jquery的on方法呢??

来吧,试试

;(function(){
  var isTouch = ('ontouchstart' in document.documentElement) ? 'touchstart' : 'click', _on = $.fn.on;
   $.fn.on = function(){
    arguments[0] = (arguments[0] === 'click') ? isTouch: arguments[0];
    return _on.apply(this, arguments);
   };
})();

希望本文所述对大家jQuery程序设计有所帮助。

Javascript 相关文章推荐
js 获取子节点函数 (兼容FF与IE)
Apr 18 Javascript
js事件(Event)知识整理
Oct 11 Javascript
用js判断是否为360浏览器的实现代码
Jan 15 Javascript
jquery实现点击label的同时触发文本框点击事件的方法
Jun 05 Javascript
javascript中mouseover、mouseout使用详解
Jul 19 Javascript
实用jquery操作表单元素的简单代码
Jul 04 Javascript
JavaScript探测CSS动画是否已经完成的方法
Aug 30 Javascript
什么是JavaScript注入攻击?
Sep 14 Javascript
JS打开摄像头并截图上传示例
Feb 18 Javascript
ui-router中使用ocLazyLoad和resolve的具体方法
Oct 18 Javascript
Vue仿今日头条实例详解
Feb 06 Javascript
Vue 重置组件到初始状态的方法示例
Oct 10 Javascript
jQuery基于扩展实现的倒计时效果
May 14 #Javascript
Angularjs中UI Router的使用方法
May 14 #Javascript
两种js监听滚轮事件的实现方法
May 13 #Javascript
原生js和jquery分别实现横向导航菜单效果
May 13 #Javascript
实例讲解Jquery中隐藏hide、显示show、切换toggle的用法
May 13 #Javascript
AngularJS在IE8的不支持的解决方法
May 13 #Javascript
基于jquery插件实现拖拽删除图片功能
Aug 27 #Javascript
You might like
批量修改RAR文件注释的php代码
2010/11/20 PHP
JSON用法之将PHP数组转JS数组,JS如何接收PHP数组
2015/10/08 PHP
详解HTTP Cookie状态管理机制
2016/01/14 PHP
在Win2003(64位)中配置IIS6+PHP5.2.17+MySQL5.5的运行环境
2016/04/04 PHP
收集的10个免费的jQuery相册
2011/02/26 Javascript
jQuery方法简洁实现隔行换色及toggleClass的使用
2013/03/15 Javascript
jQuery调用RESTful WCF示例代码(GET方法/POST方法)
2014/01/26 Javascript
js+CSS实现弹出居中背景半透明div层的方法
2015/02/26 Javascript
简介JavaScript中toUpperCase()方法的使用
2015/06/06 Javascript
js+html5操作sqlite数据库的方法
2016/02/02 Javascript
原生JavaScript实现Ajax异步请求
2017/11/19 Javascript
Angular动画实现的2种方式以及添加购物车动画实例代码
2018/08/09 Javascript
vue组件从开发到发布的实现步骤
2018/11/11 Javascript
深入了解响应式React Native Echarts组件
2019/05/29 Javascript
详解微信小程序自定义组件的实现及数据交互
2019/07/22 Javascript
在 Vue 中编写 SVG 图标组件的方法
2020/02/24 Javascript
[01:04:06]DOTA2上海特级锦标赛A组资格赛#2 Secret VS EHOME第一局
2016/02/26 DOTA
Python时间模块datetime、time、calendar的使用方法
2016/01/13 Python
Python连接phoenix的方法示例
2017/09/29 Python
Python装饰器用法实例总结
2018/02/07 Python
Django实现微信小程序的登录验证功能并维护登录态
2019/07/04 Python
python自动化UI工具发送QQ消息的实例
2019/08/27 Python
使用pytorch和torchtext进行文本分类的实例
2020/01/08 Python
Django实现任意文件上传(最简单的方法)
2020/06/03 Python
Python函数调用追踪实现代码
2020/11/27 Python
Python 获取异常(Exception)信息的几种方法
2020/12/29 Python
Topshop法国官网:英国快速时尚品牌
2018/04/08 全球购物
怎样声明一个匿名的内部类
2016/06/01 面试题
往来会计岗位职责
2013/12/19 职场文书
煤矿班组长岗位职责
2013/12/29 职场文书
军训自我鉴定100字
2014/02/13 职场文书
合作意向协议书范本
2014/03/31 职场文书
产品发布会策划方案
2014/05/12 职场文书
行为习惯主题班会
2015/08/14 职场文书
班主任工作经验交流会总结
2015/11/02 职场文书
铁拳制作人赞《铁拳7》老头环Mod:制作精良 但别弄了
2022/04/03 其他游戏