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 相关文章推荐
使用Grunt.js管理你项目的应用说明
Apr 24 Javascript
js跨域访问示例(客户端/服务端)
May 19 Javascript
Javascript学习笔记之函数篇(五) : 构造函数
Nov 23 Javascript
VC调用javascript的几种方法(推荐)
Aug 09 Javascript
学习vue.js计算属性
Dec 03 Javascript
jQuery事件_动力节点Java学院整理
Jul 05 jQuery
vue-cli的eslint相关用法
Sep 29 Javascript
JavaScript中发出HTTP请求最常用的方法
Jul 12 Javascript
详解vue+webpack+express中间件接口使用
Jul 17 Javascript
详解如何用VUE写一个多用模态框组件模版
Sep 27 Javascript
解决vue bus.$emit触发第一次$on监听不到问题
Jul 28 Javascript
Vant Weapp组件踩坑:picker的初始赋值解决
Nov 12 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
PHP聚合式迭代器接口IteratorAggregate用法分析
2017/12/28 PHP
PHP实现数组根据某个字段进行水平合并,横向合并案例分析
2019/10/08 PHP
PHP实现简单注册登录系统
2020/12/28 PHP
Wordpress ThickBox 添加“查看原图”效果代码
2010/12/11 Javascript
javascript工厂方式定义对象
2014/12/26 Javascript
jQuery实现鼠标滑过Div层背景变颜色的方法
2015/02/17 Javascript
JS判断图片是否加载完成方法汇总(最新版)
2016/05/13 Javascript
jQuery实现右下角可缩放大小的层完整实例
2016/06/20 Javascript
jQuery编写网页版2048小游戏
2017/01/06 Javascript
JavaScript获取中英文混合字符串长度的方法示例
2017/02/04 Javascript
Js apply方法详解
2017/02/16 Javascript
浅谈vuex 闲置状态重置方案
2018/01/04 Javascript
vue首次赋值不触发watch的解决方法
2018/09/11 Javascript
通过seajs实现JavaScript的模块开发及按模块加载
2019/06/06 Javascript
vue中实现图片压缩 file文件的方法
2020/05/28 Javascript
vue 重塑数组之修改数组指定index的值操作
2020/08/09 Javascript
vue 获取url参数、get参数返回数组的操作
2020/11/12 Javascript
[41:08]2014 DOTA2国际邀请赛中国区预选赛 HGT VS NE
2014/05/22 DOTA
[01:20]2018DOTA2亚洲邀请赛总决赛战队Mineski晋级之路
2018/04/07 DOTA
Python判断Abundant Number的方法
2015/06/15 Python
在python的类中动态添加属性与生成对象
2016/09/17 Python
python实现图片处理和特征提取详解
2017/11/13 Python
Python中static相关知识小结
2018/01/02 Python
pycharm 主题theme设置调整仿sublime的方法
2018/05/23 Python
Python用for循环实现九九乘法表
2018/05/31 Python
解决python中用matplotlib画多幅图时出现图形部分重叠的问题
2019/07/07 Python
matplotlib命令与格式之tick坐标轴日期格式(设置日期主副刻度)
2019/08/06 Python
Django生成PDF文档显示网页上以及PDF中文显示乱码的解决方法
2019/12/17 Python
阿迪达斯西班牙官方网站:adidas西班牙
2016/07/21 全球购物
德国街头和运动文化高品质商店:BSTN Store
2017/08/26 全球购物
学校工作推荐信范文
2014/07/11 职场文书
党员干部群众路线个人整改措施
2014/09/18 职场文书
后备干部推荐材料
2014/12/24 职场文书
golang 语言中错误处理机制
2021/08/30 Golang
浅谈JavaScript作用域
2021/12/06 Javascript
详解nginx安装过程并代理下载服务器文件
2022/02/12 Servers