jQuery 鼠标经过(hover)事件的延时处理示例


Posted in Javascript onApril 14, 2014

一、关于鼠标hover事件及延时
鼠标经过事件为web页面上非常常见的事件之一。简单的hover可以用CSS :hover伪类实现,复杂点的用js。

一般情况下,我们是不对鼠标hover事件进行延时处理。但是,有时候,为了避免不必要的干扰,常会对鼠标hover事件进行延时处理。所谓干扰,就是当用户鼠标不经意划过摸个链接,选项卡,或是其他区域时,本没有显示隐藏层,或是选项卡切换,但是由于这些元素上绑定了hover事件(或是mouseover事件),且无延时,这些时间就会立即触发,反而会对用户进行干扰。

例如,在腾讯网首页,几乎对所有的鼠标经过事件进行了延时处理,例如其选项卡:

jQuery 鼠标经过(hover)事件的延时处理示例 

或是其顶部的搜搜导航条,见下图:

jQuery 鼠标经过(hover)事件的延时处理示例 

二、实例及演示
本文的主要内容就是展示我前几天写的鼠标延迟的方法,jQuery下的方法,水平拙劣,仅供参考。本文就以腾讯网首页搜搜搜索栏的一些鼠标经过效果为实例,演示jQuery下的延时处理。下图为demo页面的效果截图:

jQuery 鼠标经过(hover)事件的延时处理示例 

三、代码与实现
说到延时,离不开window下的setTimeout方法,本实例的jQuery方法的核心也是setTimeout。代码不长,完整如下:

(function($){ 
$.fn.hoverDelay = function(options){ 
var defaults = { 
hoverDuring: 200, 
outDuring: 200, 
hoverEvent: function(){ 
$.noop(); 
}, 
outEvent: function(){ 
$.noop(); 
} 
}; 
var sets = $.extend(defaults,options || {}); 
var hoverTimer, outTimer; 
return $(this).each(function(){ 
$(this).hover(function(){ 
clearTimeout(outTimer); 
hoverTimer = setTimeout(sets.hoverEvent, sets.hoverDuring); 
},function(){ 
clearTimeout(hoverTimer); 
outTimer = setTimeout(sets.outEvent, sets.outDuring); 
}); 
}); 
} 
})(jQuery);

这段代码的目的在于让鼠标经过事件和延时分离的出来,延时以及延迟的清除都已经由此方法解决了。您所要做的,就是设定延时的时间大小,以及相应的鼠标经过或是移除事件即可。举个简单的例子吧,如下代码:
$("#test").hoverDelay({ 
hoverEvent: function(){ 
alert("经过我!"); 
} 
});

表示的含义是id为test的元素在鼠标经过后200毫秒后弹出含有“经过我!”文字字样的弹出框。

ok,现在应用到本文的实例上。

腾讯网的首页的搜索框上面除了鼠标经过延时,其换肤也是值得一提的,关于换肤我之前也提过,在jQuery-马化腾产品设计与用户体验的一些技术实现一文中,相应的demo页面您可以狠狠地点击这里:腾讯首页个性化换肤demo页面

首先,展示下腾讯首页搜索栏的主要HTML结构域代码:

<div id="sosoFod"> 
<h3 id="sosoweb" class="s1">网页</h3> 
<h3 id="sosoimg" class="s2">图片</h3> 
<h3 id="sosovid" class="s2">视频</h3> 
<h3 id="sosomus" class="s2">音乐</h3> 
<h3 id="sososoba" class="s2">搜吧</h3> 
<h3 id="sosowenwen" class="s2">问问</h3> 
<h3 id="sosoqz" class="s2">博客</h3> 
<h3 style="cursor:pointer;" class="s2">更多? 
<div style="display:none;" class="more" id="tm"> 
<ul> 
<li><a href="#">综合</a></li> 
<li><a href="#">新闻</a></li> 
<li><a href="#">词典</a></li> 
<li><a href="#">生活</a></li> 
<li><a href="#">百科</a></li> 
<li style="border-top:1px solid rgb(178, 208, 234);"><a href="#">所有产品</a></li> 
</ul> 
</div> 
</h3> 
</div>

与先首页代码几乎一致,如假包换。应用了本文没什么技术含量的延迟方法后,可以应用如下的代码实现延迟执行。
$(".s2").each(function(){ 
$("#sosoFod h3").each(function(){ 
var that = $(this); 
var id = that.attr("id"); 
if(id){ 
that.hoverDelay({ 
hoverEvent: function(){ 
$(".s1").attr("class","s2"); 
that.attr("class","s1"); //感谢“type23”提供了绑定对象方法 
$(this).attr("class","s1"); 
} 
}); 
}else{ 
that.hoverDelay({ 
outDuring: 1000, 
hoverEvent: function(){ 
$("#tm").show(); 
}, 
outEvent: function(){ 
$("#tm").hide(); 
} 
}); 
} 
});

唉,惭愧,代码就这样,没什么技术含量的,希望对有用的有用吧。“更多”的下拉鼠标移出后1000毫秒后下拉框隐藏。

基本上都是代码在撑页面,说点有用的东西吧。

hoverDelay方法共四个参数,表示意思如下:

hoverDuring       鼠标经过的延时时间
outDuring          鼠标移出的延时时间
hoverEvent        鼠标经过执行的方法
outEvent         鼠标移出执行的方法

Javascript 相关文章推荐
JS数学函数Exp使用说明
Aug 09 Javascript
Jquery each方法跳出循环,并获取返回值(实例讲解)
Dec 12 Javascript
js函数调用的方式
May 06 Javascript
JS遍历数组及打印数组实例分析
Jan 21 Javascript
AngularJS 路由和模板实例及路由地址简化方法(必看)
Jun 24 Javascript
jQuery 跨域访问解决原理案例详解
Jul 09 Javascript
基于bootstrap的选择框插件icheck
Dec 23 Javascript
解决给dom元素绑定click等事件无效问题的方法
Feb 17 Javascript
详解vue使用vue-layer-mobile组件实现toast,loading效果
Aug 31 Javascript
Vue实现本地购物车功能
Dec 05 Javascript
vue2.0 实现富文本编辑器功能
May 26 Javascript
jquery实现购物车基本功能
Oct 25 jQuery
jquery使用jxl插件导出excel示例
Apr 14 #Javascript
js 获取input点选按钮的值的方法
Apr 14 #Javascript
js生成动态表格并为每个单元格添加单击事件的方法
Apr 14 #Javascript
Js实现动态添加删除Table行示例
Apr 14 #Javascript
js实现网页倒计时、网站已运行时间功能的代码3例
Apr 14 #Javascript
PHP开发者必须掌握的6个关键字
Apr 14 #Javascript
javascript中的括号()用法小结
Apr 14 #Javascript
You might like
php的ajax框架xajax入门与试用介绍
2010/12/19 PHP
无需重新编译php加入ftp扩展的解决方法
2013/02/07 PHP
五款PHP代码重构工具推荐
2014/10/14 PHP
yiic命令时提示“php.exe”不是内部或外部命令的解决方法
2014/12/18 PHP
10个实用的脚本代码工具
2010/05/04 Javascript
JavaScript面向对象之Prototypes和继承
2012/07/12 Javascript
CSS(js)限制页面显示的文本字符长度
2012/12/27 Javascript
在JavaScript中实现类的方式探讨
2013/08/28 Javascript
javascript实现倒计时(精确到秒)
2015/06/26 Javascript
浅谈angular2的http请求返回结果的subcribe注意事项
2017/03/01 Javascript
全选复选框JavaScript编写小结(附代码)
2017/08/16 Javascript
node.js基于fs模块对系统文件及目录进行读写操作的方法详解
2017/11/10 Javascript
node中的session的具体使用
2018/09/14 Javascript
纯js实现无缝滚动功能代码实例
2020/02/21 Javascript
jQuery实现简单弹幕制作
2020/12/10 jQuery
遍历python字典几种方法总结(推荐)
2016/09/11 Python
Python实现翻转数组功能示例
2018/01/12 Python
Python使用遗传算法解决最大流问题
2018/01/29 Python
tensorflow 获取变量&amp;打印权值的实例讲解
2018/06/14 Python
Python 使用PIL中的resize进行缩放的实例讲解
2018/08/03 Python
pyshp创建shp点文件的方法
2018/12/31 Python
Python如何筛选序列中的元素的方法实现
2019/07/15 Python
基于python及pytorch中乘法的使用详解
2019/12/27 Python
Python threading.local代码实例及原理解析
2020/03/16 Python
基于selenium及python实现下拉选项定位select
2020/07/22 Python
简单了解python关键字global nonlocal区别
2020/09/21 Python
python 基于opencv实现高斯平滑
2020/12/18 Python
保洁主管岗位职责
2013/11/20 职场文书
消防安全检查制度
2014/02/04 职场文书
班级出游活动计划书
2014/08/15 职场文书
房地产端午节活动方案
2014/08/24 职场文书
工商局副局长个人对照检查材料
2014/09/25 职场文书
本溪关门山导游词
2015/02/09 职场文书
高中家长意见怎么写
2015/06/03 职场文书
天鹅湖观后感
2015/06/09 职场文书
Python 数据科学 Matplotlib图库详解
2021/07/07 Python