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 相关文章推荐
var与Javascript变量隐式声明
Sep 17 Javascript
JS中数组Array的用法示例介绍
Feb 20 Javascript
在JS数组特定索引处指定位置插入元素
Jul 27 Javascript
Jsonp post 跨域方案
Jul 06 Javascript
JS中取二维数组中最大值的方法汇总
Apr 17 Javascript
javascript 中关于array的常用方法详解
May 05 Javascript
详解Vue项目部署遇到的问题及解决方案
Jan 11 Javascript
微信浏览器左上角返回按钮监听的实现
Mar 04 Javascript
Vue路由守卫及页面登录权限控制的设置方法(两种)
Mar 31 Javascript
JS倒计时两种实现方式代码实例
Jul 27 Javascript
vue+axios 拦截器实现统一token的案例
Sep 11 Javascript
移动端JS实现拖拽两种方法解析
Oct 12 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
星际争霸任务指南——人族
2020/03/04 星际争霸
PHP封装的HttpClient类用法实例
2015/06/17 PHP
深入了解PHP中的Array数组和foreach
2016/11/06 PHP
PHP设计模式之建造者模式定义与用法简单示例
2018/08/13 PHP
用Javascript实现UTF8编码转换成gb2312编码
2006/12/22 Javascript
javascript 对象比较实现代码
2009/04/27 Javascript
jQuery选择头像并实时显示的代码
2010/06/27 Javascript
JQUERY设置IFRAME的SRC值的代码
2010/11/30 Javascript
24款非常有用的 jQuery 插件分享
2011/04/06 Javascript
jquery1.83 之前所有与异步列队相关的模块详细介绍
2012/11/13 Javascript
JS OffsetParent属性深入解析
2014/01/13 Javascript
与Math.pow 相反的函数使用介绍
2014/08/04 Javascript
js面向对象之公有、私有、静态属性和方法详解
2015/04/17 Javascript
用nodejs搭建websocket服务器
2017/01/23 NodeJs
详解用webpack把我们的业务模块分开打包的方法
2017/07/20 Javascript
Vue父组件调用子组件事件方法
2018/02/23 Javascript
AngularJS与BootStrap模仿百度分页的示例代码
2018/05/23 Javascript
详解ES6 系列之异步处理实战
2018/10/26 Javascript
kafka调试中遇到Connection to node -1 could not be established. Broker may not be available.
2019/09/17 Javascript
Array.filter中如何正确使用Async
2020/11/04 Javascript
简单的Python的curses库使用教程
2015/04/11 Python
合并百度影音的离线数据( with python 2.3)
2015/08/04 Python
举例讲解Python面相对象编程中对象的属性与类的方法
2016/01/19 Python
Python实现数据库并行读取和写入实例
2017/06/09 Python
Python学习思维导图(必看篇)
2017/06/26 Python
python numpy 常用随机数的产生方法的实现
2019/08/21 Python
Django用户认证系统如何实现自定义
2020/11/12 Python
Python离线安装各种库及pip的方法
2020/11/28 Python
两种CSS3伪类选择器详细介绍
2013/12/24 HTML / CSS
在校大学生个人的自我评价
2014/02/13 职场文书
妇联主席先进事迹
2014/05/18 职场文书
企业人事任命书
2014/06/05 职场文书
论文致谢词范文
2015/05/14 职场文书
父母教会我观后感
2015/06/17 职场文书
2019暑假阅读倡议书
2019/06/24 职场文书
Python实现byte转integer
2021/06/03 Python