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 相关文章推荐
Javascript - HTML的request类
Jul 15 Javascript
jQuery EasyUI API 中文文档 - Form表单
Oct 06 Javascript
Extjs4 消息框去掉关闭按钮(类似Ext.Msg.alert)
Apr 02 Javascript
jQuery下的动画处理总结
Oct 10 Javascript
js身份证判断方法支持15位和18位
Mar 18 Javascript
关于javascript作用域的常见面试题分享
Jun 18 Javascript
jQuery查找和过滤_动力节点节点Java学院整理
Jul 04 jQuery
js实现图片放大展示效果
Aug 30 Javascript
微信小程序之页面拦截器的示例代码
Sep 07 Javascript
JS实现的base64加密解密操作示例
Apr 18 Javascript
Vue中UI组件库之Vuex与虚拟服务器初识
May 07 Javascript
React精髓!一篇全概括小结(急速)
May 23 Javascript
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+MYSQL的文章管理系统(一)
2006/10/09 PHP
浅析ThinkPHP中的pathinfo模式和URL重写
2014/01/06 PHP
destoon文章模块调用企业会员资料的方法
2014/08/22 PHP
如何使用php实现评委评分器
2015/07/31 PHP
php性能分析之php-fpm慢执行日志slow log用法浅析
2016/10/17 PHP
thinkphp查询,3.X 5.0方法(亲试可行)
2017/06/17 PHP
firefox和IE系列的相关区别整理 以备后用
2009/12/28 Javascript
ASP.NET jQuery 实例6 (实现CheckBoxList成员全选或全取消)
2012/01/13 Javascript
IE下使用jQuery重置iframe地址时内存泄露问题解决办法
2015/02/05 Javascript
异步JS框架的作用以及实现方法
2015/10/29 Javascript
HTML5 JS压缩图片并获取图片BASE64编码上传
2020/11/16 Javascript
JavaScript生成指定范围的时间列表
2018/03/19 Javascript
JavaScript基础教程之如何实现一个简单的promise
2018/09/11 Javascript
JS实现换肤功能的方法实例详解
2019/01/30 Javascript
JS插件amCharts实现绘制柱形图默认显示数值功能示例
2019/11/26 Javascript
python使用xauth方式登录饭否网然后发消息
2014/04/11 Python
Python版微信红包分配算法
2015/05/04 Python
Python利用ElementTree模块处理XML的方法详解
2017/08/31 Python
python实现决策树分类(2)
2018/08/30 Python
python调用c++ ctype list传数组或者返回数组的方法
2019/02/13 Python
Python实现基于SVM的分类器的方法
2019/07/19 Python
如何解决django-celery启动后迅速关闭
2019/10/16 Python
解决django-xadmin列表页filter关联对象搜索问题
2019/11/15 Python
python中的subprocess.Popen()使用详解
2019/12/25 Python
在Tensorflow中实现梯度下降法更新参数值
2020/01/23 Python
keras实现调用自己训练的模型,并去掉全连接层
2020/06/09 Python
python对execl 处理操作代码
2020/06/22 Python
CSS3动画animation实现云彩向左滚动
2014/05/09 HTML / CSS
使用HTML5的Canvas绘制曲线的简单方法
2015/09/08 HTML / CSS
全陪导游欢迎词
2014/01/17 职场文书
毕业生简历自我评价范文
2014/04/09 职场文书
实习公司领导推荐函
2014/05/21 职场文书
网站出售协议书范文
2014/10/10 职场文书
最美劳动诗,致敬所有的劳动者!
2019/07/12 职场文书
vue中data改变后让视图同步更新的方法
2021/03/29 Vue.js
python可视化大屏库big_screen示例详解
2021/11/23 Python