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 相关文章推荐
lib.utf.js
Aug 21 Javascript
Javascript attachEvent传递参数的办法
Dec 14 Javascript
javascript:void(0)使用探讨
Aug 27 Javascript
js中实现多态采用和继承类似的方法
Aug 22 Javascript
angularjs中的e2e测试实例
Dec 06 Javascript
Bootstrap每天必学之js插件
Nov 30 Javascript
jsonp跨域请求数据实现手机号码查询实例分析
Dec 12 Javascript
基于js实现checkbox批量选中操作
Nov 22 Javascript
微信小程序实现轮播图效果
Sep 07 Javascript
Vue+iview+webpack ie浏览器兼容简单处理
Sep 20 Javascript
vue学习笔记之给组件绑定原生事件操作示例
Feb 27 Javascript
vue实现树状表格效果
Dec 29 Vue.js
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作的文本留言本的例子(三)
2006/10/09 PHP
学习discuz php 引入文件的方法DISCUZ_ROOT
2009/06/21 PHP
Laravel框架路由设置与使用示例
2018/06/12 PHP
laravel 输出最后执行sql 附:whereIn的使用方法
2019/10/10 PHP
详解Laravel设置多态关系模型别名的方式
2019/10/17 PHP
HR vs CL BO3 第一场 2.13
2021/03/10 DOTA
jquery 分页控件实现代码
2009/11/30 Javascript
Web 前端设计模式--Dom重构 提高显示性能
2010/10/22 Javascript
EasyUI 中 MenuButton 的使用方法
2012/07/14 Javascript
javaScript让文本框内的最后一个文字的后面获得焦点实现代码
2013/01/06 Javascript
JQuery操作三大控件(下拉,单选,复选)的方法
2013/08/06 Javascript
js中数组Array的一些常用方法总结
2013/08/12 Javascript
jquery动态添加元素事件失效问题解决方法
2014/05/23 Javascript
jQuery 遍历函数详解
2015/07/05 Javascript
XMLHttpRequest Level 2 使用指南
2016/08/26 Javascript
JavaScript满天星导航栏实现方法
2018/03/08 Javascript
解决vue项目中type=”file“ change事件只执行一次的问题
2018/05/16 Javascript
python生成随机验证码(中文验证码)示例
2014/04/03 Python
Python实现的检测网站挂马程序
2014/11/30 Python
python使用urllib2提交http post请求的方法
2015/05/26 Python
使用paramiko远程执行命令、下发文件的实例
2017/10/01 Python
Python实现确认字符串是否包含指定字符串的实例
2018/05/02 Python
opencv调整图像亮度对比度的示例代码
2019/09/27 Python
使用Python脚本从文件读取数据代码实例
2020/01/19 Python
Win 10下Anaconda虚拟环境的教程
2020/05/18 Python
使用pytorch 筛选出一定范围的值
2020/06/28 Python
matplotlib交互式数据光标mpldatacursor的实现
2021/02/03 Python
CSS3伪类选择器:nth-child()
2009/04/02 HTML / CSS
css3+伪元素实现鼠标移入时下划线向两边展开的效果
2017/04/25 HTML / CSS
HTML5之HTML元素扩展(下)—增强的Form表单元素值得关注
2013/01/31 HTML / CSS
TripAdvisor西班牙官方网站:全球领先的旅游网站
2018/01/10 全球购物
处级领导班子全部召开专题民主生活会情况汇报
2014/09/27 职场文书
感谢信格式范文
2015/01/22 职场文书
入党个人总结范文
2015/03/02 职场文书
详解Flutter网络请求Dio库的使用及封装
2022/04/14 Java/Android
Python使用Opencv打开笔记本电脑摄像头报错解问题及解决
2022/06/21 Python