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 相关文章推荐
Array.slice()与Array.splice()的返回值类型
Oct 09 Javascript
google jQuery 引用文件,jQuery 引用地址集合(jquery 1.2.6至jquery1.5.2)
Apr 24 Javascript
关于jQuery参考实例 1.0 jQuery的哲学
Apr 07 Javascript
javascript中的循环语句for语句深入理解
Apr 04 Javascript
jquery用data方法获取某个元素上的事件
Jun 23 Javascript
JavaScript程序开发之JS代码放置的位置
Jan 15 Javascript
Asp.Net之JS生成分页条的方法
Nov 23 Javascript
微信小程序支付功能 php后台对接完整代码分享
Jun 12 Javascript
Swiper.js实现移动端元素左右滑动
Sep 08 Javascript
微信内置开发 iOS修改键盘换行为搜索的解决方案
Nov 06 Javascript
vue 实现购物车总价计算
Nov 06 Javascript
Node绑定全局TraceID的实现方法
Nov 14 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新手上路(七)
2006/10/09 PHP
php中将数组转成字符串并保存到数据库中的函数代码
2013/09/29 PHP
3种php生成唯一id的方法
2015/11/23 PHP
PHP自定义错误用法示例
2016/09/28 PHP
PHP 无限级分类
2017/05/04 PHP
PHP实现笛卡尔积算法的实例讲解
2019/12/22 PHP
JavaScript 继承详解(三)
2009/07/13 Javascript
使用jquery读取html5 localstorage的值的方法
2013/01/04 Javascript
ie 7/8不支持trim的属性的解决方案
2014/05/23 Javascript
jQuery学习笔记之基础中的基础
2015/01/19 Javascript
在Debian(Raspberry Pi)树莓派上安装NodeJS的教程详解
2017/09/19 NodeJs
JS实现json对象数组按对象属性排序操作示例
2018/05/18 Javascript
小试SVG之新手小白入门教程
2019/01/08 Javascript
微信小程序实现的自定义分享功能示例
2019/02/12 Javascript
Electron-vue开发的客户端支付收款工具的实现
2019/05/24 Javascript
在vue中根据光标的显示与消失实现下拉列表
2019/09/29 Javascript
node.js域名解析实现方法详解
2019/11/05 Javascript
小程序实现图片预览裁剪插件
2019/11/22 Javascript
vue中的.$mount('#app')手动挂载操作
2020/09/02 Javascript
Python利用多进程将大量数据放入有限内存的教程
2015/04/01 Python
python制作花瓣网美女图片爬虫
2015/10/28 Python
对Python使用mfcc的两种方式详解
2019/01/09 Python
Django 中间键和上下文处理器的使用
2019/03/17 Python
python程序 线程队列queue使用方法解析
2019/09/23 Python
python 进程间数据共享multiProcess.Manger实现解析
2019/09/23 Python
在pycharm中关掉ipython console/PyDev操作
2020/06/09 Python
HTML5 本地存储实现购物车功能
2017/09/07 HTML / CSS
英国户外装备商店:Ultimate Outdoors
2019/05/07 全球购物
HolidayLettings英国:预订最好的度假公寓、别墅和自助式住宿
2019/08/27 全球购物
数控加工专业毕业生自荐信
2013/09/27 职场文书
平面设计师的工作职责
2013/11/21 职场文书
促销活动总结报告
2014/04/26 职场文书
七一讲话心得体会
2014/09/05 职场文书
党的群众路线教育实践活动个人对照检查材料(四风)
2014/11/05 职场文书
感恩教师主题班会
2015/08/12 职场文书
创业计划书之书店
2019/09/10 职场文书