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 相关文章推荐
use jscript Create a SQL Server database
Jun 16 Javascript
理解Javascript闭包
Nov 01 Javascript
JS封装cookie操作函数实例(设置、读取、删除)
Nov 17 Javascript
js中遍历Map对象的简单实例
Aug 08 Javascript
Node.js利用Net模块实现多人命令行聊天室的方法
Dec 23 Javascript
详解Vue方法与事件
Mar 09 Javascript
新手vue构建单页面应用实例代码
Sep 18 Javascript
微信小程序的生命周期的详解
Oct 19 Javascript
jQuery实现的点击显示隐藏下拉菜单功能完整示例
May 17 jQuery
微信小程序渲染性能调优小结
Jul 30 Javascript
vue项目中使用多选框的实例代码
Jul 22 Javascript
JavaScript文档对象模型DOM
Nov 20 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
打造计数器DIY三步曲(下)
2006/10/09 PHP
PHP 中dirname(_file_)讲解
2007/03/18 PHP
php数组函数序列之rsort() - 对数组的元素值进行降序排序
2011/11/02 PHP
静态图片的十一种滤镜效果--不支持Ie7及非IE浏览器。
2007/03/06 Javascript
JavaScript表达式:URL 协议介绍
2013/03/10 Javascript
cookie 最近浏览记录(中文escape转码)具体实现
2013/06/08 Javascript
通过url查找a元素并点击
2014/04/09 Javascript
JavaScript返回当前会话cookie全部键值对照的方法
2015/04/03 Javascript
理解javascript模块化
2016/03/28 Javascript
深入理解JS DOM事件机制
2016/08/06 Javascript
Angular.Js的自动化测试详解
2016/12/09 Javascript
jQuery实现模拟flash头像裁切上传功能示例
2016/12/11 Javascript
Angular工具方法学习
2016/12/26 Javascript
JS出现失效的情况总结
2017/01/20 Javascript
浅谈Node.js 子进程与应用场景
2018/01/24 Javascript
新版小程序登录授权的方法
2018/12/12 Javascript
解决vue下载后台传过来的乱码流的问题
2020/12/05 Vue.js
原生js实现无缝轮播图效果
2021/01/28 Javascript
Python3.5字符串常用操作实例详解
2019/05/01 Python
Python进阶:生成器 懒人版本的迭代器详解
2019/06/29 Python
keras在构建LSTM模型时对变长序列的处理操作
2020/06/29 Python
详解canvas绘图时遇到的跨域问题
2018/03/22 HTML / CSS
Html5 Canvas动画基础碰撞检测的实现
2018/12/06 HTML / CSS
牵手50香港:专为黄金岁月的单身人士而设的交友网站
2020/08/14 全球购物
C#实现对任一张表的数据进行增,删,改,查要求,运用Webservice,体现出三层架构
2014/07/11 面试题
优秀民警事迹材料
2014/01/29 职场文书
面试后感谢信怎么写
2014/02/01 职场文书
高一新生军训感言
2014/03/02 职场文书
雷人标语集锦
2014/06/19 职场文书
安全生产年活动总结
2014/08/29 职场文书
汽车销售助理岗位职责
2015/04/14 职场文书
2015年勤工助学工作总结
2015/04/29 职场文书
前端学习——JavaScript原生实现购物车案例
2021/03/31 Javascript
安装pytorch时报sslerror错误的解决方案
2021/05/17 Python
Java 轮询锁使用时遇到问题
2022/05/11 Java/Android
python库Tsmoothie模块数据平滑化异常点抓取
2022/06/10 Python