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下拉框选项单击事件的例子分享
Mar 04 Javascript
AngularJS 2.0入门权威指南
Oct 08 Javascript
JavaScript  event对象整理及详细介绍
Oct 10 Javascript
AngularJs中Bootstrap3 datetimepicker使用实例
Dec 13 Javascript
bootstrap+jQuery 实现下拉菜单中复选框全选和全不选效果
Jun 12 jQuery
基于vue的短信验证码倒计时demo
Sep 13 Javascript
JavaScript模拟实现封装的三种方式及写法区别
Oct 27 Javascript
Node.js文件编码格式的转换的方法
Apr 27 Javascript
Vue.js组件高级特性实例详解
Dec 24 Javascript
如何阻止小程序遮罩层下方图层滚动
Sep 05 Javascript
微信小程序实现一张或多张图片上传(云开发)
Sep 25 Javascript
Vue组件通信入门之Provide和Inject机制
Dec 29 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
Yii框架关联查询with用法分析
2014/12/02 PHP
PHP二维数组去重算法
2016/12/17 PHP
php+jQuery ajax实现的实时刷新显示数据功能示例
2019/09/12 PHP
jQuery 源码分析笔记(7) Queue
2011/06/19 Javascript
让图片旋转任意角度及JQuery插件使用介绍
2013/03/20 Javascript
解析URI与URL之间的区别与联系
2013/11/22 Javascript
分享javascript计算时间差的示例代码
2020/03/19 Javascript
谈一谈JS消息机制和事件机制的理解
2016/04/14 Javascript
全面解析Bootstrap中tooltip、popover的使用方法
2016/06/13 Javascript
JS简单测试循环运行时间的方法
2016/09/04 Javascript
解决option标签selected=&quot;selected&quot;属性失效的问题
2017/11/06 Javascript
如何让你的JS代码更好看易读
2017/12/01 Javascript
react-native滑动吸顶效果的实现过程
2019/06/03 Javascript
移动端吸顶fixbar的解决方案详解
2019/07/17 Javascript
Bootstrap table 实现树形表格联动选中联动取消功能
2019/09/30 Javascript
微信小程序事件流原理解析
2019/11/27 Javascript
Java Varargs 可变参数用法详解
2020/01/28 Javascript
详解js中的几种常用设计模式
2020/07/16 Javascript
Vue Render函数原理及代码实例解析
2020/07/30 Javascript
[46:47]2014 DOTA2国际邀请赛中国区预选赛5.21 LGD-CDEC VS NE
2014/05/22 DOTA
python代码制作configure文件示例
2014/07/28 Python
python实现向ppt文件里插入新幻灯片页面的方法
2015/04/28 Python
Python使用ntplib库同步校准当地时间的方法
2016/07/02 Python
浅谈python在提示符下使用open打开文件失败的原因及解决方法
2018/11/30 Python
python实现向微信用户发送每日一句 python实现微信聊天机器人
2019/03/27 Python
Django网络框架之HelloDjango项目创建教程
2019/06/06 Python
pycharm访问mysql数据库的方法步骤
2019/06/18 Python
如何快速理解python的垃圾回收机制
2020/09/01 Python
Origins加拿大官网:雅诗兰黛集团高端植物护肤品牌
2017/11/19 全球购物
欧姆龙医疗保健与医疗产品:Omron Healthcare
2020/02/10 全球购物
满月酒答谢词
2014/01/14 职场文书
《放小鸟》教学反思
2014/04/20 职场文书
新闻学专业职业生涯规划范文:我的人生我做主
2014/09/12 职场文书
软件研发工程师岗位职责
2014/09/30 职场文书
老舍《猫》教学反思
2016/02/17 职场文书
使用 CSS 构建强大且酷炫的粒子动画效果
2022/08/14 HTML / CSS