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 相关文章推荐
关于query Javascript CSS Selector engine
Apr 12 Javascript
Jquery的Tabs内容轮换效果实现代码,几行搞定
Feb 12 Javascript
JavaScript中window.showModalDialog()用法详解
Dec 18 Javascript
浅谈javascript获取元素transform参数
Jul 24 Javascript
jQuery插件Easyui设置datagrid的pageNumber导致两次请求问题的解决方法
Aug 06 Javascript
微信小程序入门教程
Nov 18 Javascript
浅谈JavaScript正则表达式-非捕获性分组
Mar 08 Javascript
JQuery用$.ajax或$.getJSON跨域获取JSON数据的实现代码
Sep 23 jQuery
每个 JavaScript 工程师都应懂的33个概念
Oct 22 Javascript
详解js 创建对象的几种方法
Mar 08 Javascript
微信域名检测接口调用演示步骤(含PHP、Python)
Dec 08 Javascript
Jquery+AJAX实现无刷新上传并重命名文件操作示例【PHP后台接收】
May 29 jQuery
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中的多种序列化
2016/08/28 PHP
PHP那些琐碎的知识点(整理)
2017/05/20 PHP
javascript json2 使用方法
2010/03/16 Javascript
ExtJS DOM元素操作经验分享
2013/08/28 Javascript
javascript动态的改变IFrame的高度实现自动伸展
2013/10/12 Javascript
JQuery的$和其它JS发生冲突的快速解决方法
2014/01/24 Javascript
javascript判断网页是关闭还是刷新
2015/09/12 Javascript
全面解析Bootstrap表单使用方法(表单控件状态)
2015/11/24 Javascript
学习JavaScript设计模式(单例模式)
2015/11/26 Javascript
基于javascript实现精确到毫秒的倒计时限时抢购
2016/04/17 Javascript
谈谈JavaScript的New关键字
2016/08/26 Javascript
jQuery实现输入框邮箱内容自动补全与上下翻动显示效果【附demo源码下载】
2016/09/20 Javascript
全面解析vue中的数据双向绑定
2017/05/10 Javascript
JavaScript实现图片无缝滚动效果
2017/07/07 Javascript
微信小程序手机号码验证功能的实例代码
2018/08/28 Javascript
js实现json数组分组合并操作示例
2019/02/12 Javascript
vue+elementui通用弹窗的实现(新增+编辑)
2021/01/07 Vue.js
[12:21]VICI vs TNC (BO3)
2018/06/07 DOTA
用Python编写一个国际象棋AI程序
2014/11/28 Python
Python加pyGame实现的简单拼图游戏实例
2015/05/15 Python
python开发之IDEL(Python GUI)的使用方法图文详解
2015/11/12 Python
在Mac OS上使用mod_wsgi连接Python与Apache服务器
2015/12/24 Python
Python 数据结构之队列的实现
2017/01/22 Python
插入排序_Python与PHP的实现版(推荐)
2017/05/11 Python
python实现简单的文字识别
2018/11/27 Python
Python Celery多队列配置代码实例
2019/11/22 Python
python中什么是面向对象
2020/06/11 Python
python 8种必备的gui库
2020/08/27 Python
python tkinter的消息框模块(messagebox,simpledialog)
2020/11/07 Python
举例详解HTML5中使用JSON格式提交表单
2015/06/16 HTML / CSS
荷兰DOD药房中文官网:DeOnlineDrogist
2020/12/27 全球购物
毕业生简历自我评价范文
2014/04/09 职场文书
我的中国梦演讲稿800字
2014/08/19 职场文书
Golang 获取文件md5校验的方法以及效率对比
2021/05/08 Golang
聊一聊python常用的编程模块
2021/05/14 Python
一篇带你入门Java垃圾回收器
2021/06/16 Java/Android