
原图地址:淘宝tms里发现,偷过来用用,喜欢就去看看咩~~~
做导航菜单的时候,有的时候希望,鼠标移到菜单上去过会儿才激活二级菜单,鼠标移出去之后过会儿才消失。jquery自带的 hover 事件是立马响应的。google了下网上好像没lazyhover的插件。于是 就华丽丽的诞生了这个lazyhover 的插件^__^。
闲话少说,先上代码:
$(function(){
$.fn.lazyhover = function(fuc_on, fuc_out, de_on, de_out) {
var self = $(this);
var flag = 1;
var h;
var handle = function(elm){
clearTimeout(h);
if(!flag) self.removeData('timer');
return flag ? fuc_on.apply(elm) : fuc_out.apply(elm);
};
var time_on = de_on || 0;
var time_out = de_out || 500;
var timer = function(elm){
h && clearTimeout(h);
h = setTimeout(function() { handle(elm); }, flag ? time_on : time_out);
self.data('timer', h);
}
self.hover(
function(){
flag = 1 ;
timer(this);
},
function(){
flag = 0 ;
timer(this);
}
);
}
});
插件使用方法我就不说了,直接贴带代码前就可以,当然jquery.js是必要的(丫不用jquery就当看A-V =,=)。
算了,还是贴个使用方法吧:使用方法其实跟 jquery一样就是多了两个参数,一个是延迟进入的时间(毫秒),还有一个是延迟退出的时间。
$('#target').lazyhover(
function(){
$(this).addClass('unfold');
},
function(){
$(this).addClass('unfold');
},
200,1000 //就多了2个参数
);
目前只是个初版,觉得有好多细节可以优化,
待优化点:
- 1. 比如当延迟时间是0的时候就要避开setTimeout,毕竟setTimeout是个比较耗资源的家伙。
- 2. 其次当操作对象过多的时候浏览器负载能力的处理,目前是单对象独立时间事件
好了打完收工,有意见想射就射出来吧。哥不怕,咩哈哈~~~~ 用脸接着
开源才是真汉子。
哟?不错哎 订阅飞鱼的RSS Feeds 回去慢慢看^_^
该文章已经被摸了502次。 共有 12 条评论
延迟是0的时候就不用这个lazyhover了,直接hover…
大叔
回复
飞鱼 Reply:
September 8th, 2010 at 12:41
只有一个0 的时候就需要避开 timer
回复
小豪 Reply:
September 8th, 2010 at 18:04
只是如果不需要延迟的时候还用这个lazyhover()就太掘了….直接用hover()更有效率
回复
飞鱼 Reply:
September 8th, 2010 at 20:05
嗯 所以 应该在当timer 为 0 的时候 绕过timer
回复
小豪 Reply:
September 8th, 2010 at 20:08
嘎嘎
回复
好东西啊
回复
飞鱼 Reply:
September 9th, 2010 at 0:43
晚上又优化了一下。加入了事件出发机制,以及原状态返回嘎嘎
回复
写文章很huang
回复
飞鱼 Reply:
September 9th, 2010 at 0:42
谁h 谁知道,^__^
回复
怎么感觉看博客有点看AV,很黄很暴力
回复
飞鱼 Reply:
November 14th, 2010 at 11:24
hoho~ 灰常荣幸“
回复
我一直在想jquery 有没有这种东西呢..果断拿走..
回复
发表评论