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 相关文章推荐
腾讯与新浪的通过IP地址获取当前地理位置(省份)的接口
Jul 26 Javascript
JS调试必备的5个debug技巧
Mar 07 Javascript
JavaScript中property和attribute的区别详细介绍
Mar 03 Javascript
jQuery处理图片加载失败的常用方法
Jun 08 Javascript
AngularJS 支付倒计时功能实现思路
Jun 05 Javascript
详解vue-router2.0动态路由获取参数
Jun 14 Javascript
微信小程序地图导航功能实现完整源代码附效果图(推荐)
Apr 28 Javascript
解决vue动态路由异步加载import组件,加载不到module的问题
Jul 26 Javascript
基于vue hash模式微信分享#号的解决
Sep 07 Javascript
详细分析JavaScript中的深浅拷贝
Sep 17 Javascript
微信小程序向Java后台传输参数的方法实现
Dec 10 Javascript
Vue过滤器(filter)实现及应用场景详解
Jun 15 Vue.js
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 图片文件上传实现代码
2010/12/29 PHP
php把数据表导出为Excel表的最简单、最快的方法(不用插件)
2014/05/10 PHP
PHP排序算法之归并排序(Merging Sort)实例详解
2018/04/21 PHP
PHP检查端口是否可以被绑定的方法示例
2018/08/09 PHP
PHP实现的杨辉三角求解算法分析
2019/03/11 PHP
JQuery学习笔记 nt-child的使用
2011/01/17 Javascript
JS自定义对象实现Java中Map对象功能的方法
2015/01/20 Javascript
简介AngularJS的HTML DOM支持情况
2015/06/17 Javascript
JS脚本根据手机浏览器类型跳转WAP手机网站(两种方式)
2015/08/04 Javascript
javascript计时器编写过程与实现方法
2016/02/29 Javascript
JS实现HTML表格排序功能
2016/08/05 Javascript
JavaScript学习笔记整理_简单实现枚举类型,扑克牌应用
2016/09/19 Javascript
vue.js表格分页示例
2016/10/18 Javascript
es6数组之扩展运算符操作实例分析
2020/04/25 Javascript
Vue scoped及deep使用方法解析
2020/08/01 Javascript
[04:45]上海特级锦标赛主赛事第三日TOP10
2016/03/05 DOTA
关于Python元祖,列表,字典,集合的比较
2017/01/06 Python
Python自动化运维之IP地址处理模块详解
2017/12/10 Python
树莓派使用python-librtmp实现rtmp推流h264的方法
2019/07/22 Python
pygame实现贪吃蛇游戏(下)
2019/10/29 Python
python使用正则来处理各种匹配问题
2019/12/22 Python
Python astype(np.float)函数使用方法解析
2020/06/08 Python
如何通过python实现IOU计算代码实例
2020/11/02 Python
Python 虚拟环境工作原理解析
2020/12/24 Python
html5+css3之动画在webapp中的应用
2014/11/21 HTML / CSS
露营世界:Camping World
2017/02/02 全球购物
英国知名美妆护肤在线商城:Zest Beauty
2018/04/24 全球购物
企划经理的岗位职责
2013/11/17 职场文书
帮一个朋友写的求职信
2014/08/09 职场文书
教师节活动总结
2014/08/29 职场文书
个人四风对照检查材料
2014/09/26 职场文书
领导班子四风查摆对照检查材料思想汇报
2014/10/05 职场文书
2014年药店工作总结
2014/11/20 职场文书
顶岗实习协议书
2015/01/29 职场文书
廉政承诺书范文
2015/04/28 职场文书
SpringCloud Feign请求头删除修改的操作代码
2022/03/20 Java/Android