博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
jQuery hover 延时器实现代码
阅读量:6913 次
发布时间:2019-06-27

本文共 1745 字,大约阅读时间需要 5 分钟。

例如: 

复制代码代码如下:
$('#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://ibicl.baihongyu.com/

你可能感兴趣的文章
集合的子集
查看>>
湖南工业大学第一届ACM竞赛 我素故我在 DFS
查看>>
BZOJ-1095 Hide 捉迷藏 模型建立+线段树
查看>>
HDU-4572 Bottles Arrangement 大猜想
查看>>
HDU-4521 小明系列问题——小明序列 间隔限制最长上升子序列
查看>>
jsp jsp属性范围
查看>>
实现一个两列布局(左侧定宽,右侧自适应)
查看>>
PHP和Redis实现在高并发下的抢购及秒杀功能示例详解
查看>>
mysql用户管理
查看>>
postgresql 9.4.17 64位安装说明
查看>>
浏览器兼容之旅的第一站:如何创建条件样式
查看>>
bzoj4013[HNOI2015]实验比较
查看>>
XPath用法详解
查看>>
mysql数据库的数据类型及约束
查看>>
9用户权限相关命令
查看>>
玩玩Windows Azure
查看>>
2. Add Two Numbers
查看>>
211:The Domino Effect
查看>>
使用Action来重构相关的方法
查看>>
2009下下半年目标
查看>>