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 相关文章推荐
Javascript Math ceil()、floor()、round()三个函数的区别
Mar 09 Javascript
js动态生成指定行数的表格
Jul 11 Javascript
Jquery图片延迟加载插件jquery.lazyload.js的使用方法
May 21 Javascript
浅谈JS中逗号运算符的用法
Jun 12 Javascript
javascript 实现动态侧边栏实例详解
Nov 11 Javascript
AngularJS中directive指令使用之事件绑定与指令交互用法示例
Nov 22 Javascript
学习vue.js中class与style绑定
Dec 03 Javascript
vue中简单弹框dialog的实现方法
Feb 26 Javascript
解决vue-cli脚手架打包后vendor文件过大的问题
Sep 27 Javascript
JS数组求和的常用方法实例小结
Jan 07 Javascript
如何在node环境实现“get数据解析”代码实例
Jul 03 Javascript
逐行分析鸿蒙系统的 JavaScript 框架(推荐)
Sep 17 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
解析php做推送服务端实现ios消息推送
2013/07/01 PHP
PHP批量去除BOM头代码分享
2015/06/26 PHP
php实现QQ空间获取当前用户的用户名并生成图片
2015/07/25 PHP
PHP开发中常用的十个代码样例
2016/02/02 PHP
详解阿里云视频直播PHP-SDK接入教程
2020/07/09 PHP
科讯商业版中用到的ajax空间与分页函数
2007/09/02 Javascript
capacityFixed 基于jquery的类似于新浪微博新消息提示的定位框
2011/05/24 Javascript
JavaScript 原型继承
2011/12/26 Javascript
侧栏跟随滚动的简单实现代码
2013/03/18 Javascript
JS 实现Json查询的方法实例
2013/04/12 Javascript
javascript 树形导航菜单实例代码
2013/08/13 Javascript
js 遍历json返回的map内容示例代码
2013/10/29 Javascript
jquery获取form表单input元素值的简单实例
2016/05/30 Javascript
iOS和Android用同一个二维码实现跳转下载链接的方法
2016/09/28 Javascript
BootStrap轮播HTML代码(推荐)
2016/12/10 Javascript
详解如何实现一个简单的Node.js脚手架
2017/12/04 Javascript
vue的安装及element组件的安装方法
2018/03/09 Javascript
Vue2(三)实现子菜单展开收缩,带动画效果实现方法
2019/04/28 Javascript
vue2.* element tabs tab-pane 动态加载组件操作
2020/07/19 Javascript
Python中分数的相关使用教程
2015/03/30 Python
Python求两个文本文件以行为单位的交集、并集与差集的方法
2015/06/17 Python
Python使用filetype精确判断文件类型
2017/07/02 Python
python 统计一个列表当中的每一个元素出现了多少次的方法
2018/11/14 Python
django框架基于模板 生成 excel(xls) 文件操作示例
2019/06/19 Python
Python Django Vue 项目创建过程详解
2019/07/29 Python
Python3 venv搭建轻量级虚拟环境的步骤(图文)
2019/08/09 Python
深入解析HTML5中的Blob对象的使用
2015/09/08 HTML / CSS
英国知名奢侈品包包品牌:Milli Millu
2016/12/22 全球购物
SQL Server 2000数据库的文件有哪些,分别进行描述
2013/03/30 面试题
暑期实习鉴定
2013/12/16 职场文书
好邻里事迹材料
2014/01/16 职场文书
企业党建工作汇报材料
2014/08/19 职场文书
2015年检验科工作总结
2015/04/27 职场文书
上课迟到检讨书范文
2015/05/06 职场文书
nginx服务器的下载安装与使用详解
2021/08/02 Servers
PostgreSQL基于pgrouting的路径规划处理方法
2022/04/18 PostgreSQL