jQuery hover 延时器实现代码


Posted in Javascript onMarch 12, 2011

例如:

$('#foo').slideUp(300).delay(800).fadeIn(400);// 在.slideUp() 和 .fadeIn()之间延时800毫秒。

hover是否可以设计一个延时器呢?答案是肯定的。延时操作目的是为了防止用户误触发事件,一般情况下鼠标指针小于150毫秒的停留时间都可以被忽略。其实,如果入侵delay全能让其作用在hover事件上,但是为了避免John Resig不断的折腾jQuery而导致兼容问题,还是老老实实的写标准插件比较好。
目标
继承jQuery API的优雅:jQuery(expression).mouseDelay(150).hover(over, out)
不得破坏jQuery原型链
上述目标看起来很帅气,实现起来却非常简单,仅仅十多行的代码我都不好意思拿来拼凑文章:
源代码
/*! 
* jQuery.mouseDelay.js v1.2 
* http://www.planeart.cn/?p=1073 
* Copyright 2011, TangBin 
* Dual licensed under the MIT or GPL Version 2 licenses. 
*/ 
(function ($, plugin) { 
var data = {}, id = 1, etid = plugin + 'ETID'; 
// 延时构造器 
$.fn[plugin] = function (speed, group) { 
id ++; 
group = group || this.data(etid) || id; 
speed = speed || 150; 
// 缓存分组名称到元素 
if (group === id) this.data(etid, group); 
// 暂存官方的hover方法 
this._hover = this.hover; 
// 伪装一个hover函数,并截获两个回调函数交给真正的hover函数处理 
this.hover = function (over, out) { 
over = over || $.noop; 
out = out || $.noop; 
this._hover(function (event) { 
var elem = this; 
clearTimeout(data[group]); 
data[group] = setTimeout(function () { 
over.call(elem, event); 
}, speed); 
}, function (event) { 
var elem = this; 
clearTimeout(data[group]); 
data[group] = setTimeout(function () { 
out.call(elem, event); 
}, speed); 
}); 
return this; 
}; 
return this; 
}; 
// 冻结选定元素的延时器 
$.fn[plugin + 'Pause'] = function () { 
clearTimeout(this.data(etid)); 
return this; 
}; 
// 静态方法 
$[plugin] = { 
// 获取一个唯一分组名称 
get: function () { 
return id ++; 
}, 
// 冻结指定分组的延时器 
pause: function (group) { 
clearTimeout(data[group]); 
} 
}; 
})(jQuery, 'mouseDelay');

API说明

方法 参数 说明
mouseDelay (speed, group) 速度, 设置延时分组名称 设置延时触发效果. 两个参数都是可选的
mouseDelayPause() [无] 冻结选定元素的延时器
jQuery.mouseDelay.pause (group) 延时分组名称 冻结指定分组的延时器
jQuery.mouseDelay.get () [无] 获取一个不重复的分组名
下载
演示 

http://demo.3water.com/js/2011/mouseDelay/index.htm

打包下载

planeArt.cn原创文章

Javascript 相关文章推荐
Javascript中的变量使用说明
May 18 Javascript
javascript预览上传图片发现的问题的解决方法
Nov 25 Javascript
深入探密Javascript数组方法
Jan 08 Javascript
JavaScript使用setTimeout实现延迟弹出警告框的方法
Apr 07 Javascript
简介JavaScript中的push()方法的使用
Jun 09 Javascript
Javascript别踩白块儿(钢琴块儿)小游戏实现代码
Jul 20 Javascript
VueJs单页应用实现微信网页授权及微信分享功能示例
Jul 26 Javascript
JavaScript定义及输出螺旋矩阵的方法详解
Dec 01 Javascript
vue生命周期的探索
Apr 03 Javascript
详解vue-cli3多页应用改造
Jun 04 Javascript
原生js实现随机点名
Jul 05 Javascript
在vue项目中 实现定义全局变量 全局函数操作
Oct 26 Javascript
js中if语句的几种优化代码写法
Mar 12 #Javascript
鼠标事件延时切换插件
Mar 12 #Javascript
autoIMG 基于jquery的图片自适应插件代码
Mar 12 #Javascript
再谈javascript图片预加载技术(详细演示)
Mar 12 #Javascript
在jQuery1.5中使用deferred对象 着放大镜看Promise
Mar 12 #Javascript
使用jquery插件实现图片延迟加载技术详细说明
Mar 12 #Javascript
Jquery.LazyLoad.js修正版下载,实现图片延迟加载插件
Mar 12 #Javascript
You might like
php addslashes和mysql_real_escape_string
2010/01/24 PHP
基于PHP实现商品成交时发送短信功能
2016/05/11 PHP
jquery实现图片随机排列的方法
2015/05/04 Javascript
详解JavaScript操作HTML DOM的基本方式
2015/10/21 Javascript
基于jQuery实现左右图片轮播(原理通用)
2015/12/24 Javascript
jQuery获取checkbox选中的值
2016/01/28 Javascript
AngularJS模块详解及示例代码
2016/08/17 Javascript
AngularJS通过$location获取及改变当前页面的URL
2016/09/23 Javascript
Angular中使用ui router实现系统权限控制及开发遇到问题
2016/09/23 Javascript
Javascript中常用的检测方法小结
2016/10/08 Javascript
AngularJS使用ng-Cloak阻止初始化闪烁问题的方法
2016/11/03 Javascript
bootstrap-datetimepicker实现只显示到日期的方法
2016/11/25 Javascript
nodejs实现截取上传视频中一帧作为预览图片
2017/12/10 NodeJs
Angular实现的进度条功能示例
2018/02/18 Javascript
koa2实现登录注册功能的示例代码
2018/12/03 Javascript
微信小程序实现带参数的分享功能(两种方法)
2019/05/17 Javascript
vue 使用element-ui中的Notification自定义按钮并实现关闭功能及如何处理多个通知
2019/08/17 Javascript
javascript严格模式详解(含严格模式与非严格模式的区别)
2019/11/12 Javascript
JavaScript实现Tab选项卡切换
2020/02/13 Javascript
[05:09]DOTA2-DPC中国联赛2月22日Recap集锦
2021/03/11 DOTA
Python实现简单状态框架的方法
2015/03/19 Python
对于Python中线程问题的简单讲解
2015/04/03 Python
解析Python中的eval()、exec()及其相关函数
2017/12/20 Python
python print 按逗号或空格分隔的方法
2018/05/02 Python
Python Django框架url反向解析实现动态生成对应的url链接示例
2019/10/18 Python
python将数组n等分的实例
2019/12/02 Python
python 发送邮件的四种方法汇总
2020/12/02 Python
加拿大最大的箱包及旅游配件零售商:Bentley Leathers
2017/07/19 全球购物
教师业务学习制度
2014/01/25 职场文书
销售经理竞聘书
2014/03/31 职场文书
大班开学家长寄语
2014/04/04 职场文书
学习优秀党员杨宗兴先进事迹材料思想汇报
2014/09/14 职场文书
乡镇党的群众路线对照检查材料
2014/09/24 职场文书
2014年实验室工作总结
2014/12/03 职场文书
收银员岗位职责范本
2015/04/07 职场文书
python自动计算图像数据集的RGB均值
2021/06/18 Python