HeJ小鼠!
我可能是这里的傻瓜,但我无法弄清楚这一点;
我正在使用javascript中的基本hover()函数构建一个水平菜单。当您离开锚点时,在悬停效果消失之前会有一个短暂的时间。
所以我要做的是:在锚点的ID之后命名Timeout,在其中触发mouseleave以便在mouseenter上再次停止正确的Timeout。
在Mouseenter上我通过获取id来检查哪个锚被悬停,我取消了这个id的超时,我将hvr-Class添加到悬停的锚点:
var t = $(this).attr('id');
clearTimeout(t);
$(this).addClass('hvr');
在Mouseleave上我基本上想做这个:
$(this).attr('id') = setTimeout('doSoemthing()',66);
但是这会导致错误,因为=的左侧不允许表达式。我想到了这样的事情:
var ts = $(this).attr('id');
ts = setTimeout('doSoemthing()',66);
但这也不起作用,因为它只会覆盖变量t。相反,我想要为Timeout-Name“打印”变量的值。如果我使用固定的超时名称,一切都像魅力,但每个链接只有一个(相同)超时,但没有。
有办法做到这一点吗?还是我不在赛道上?
这是完整的功能:
$("nav a").hover(
function(){
// On MouseEnter
var t = $(this).attr('id');
clearTimeout(t);
$(this).addClass('hvr');
},function(){
// On MouseLeave
$(this).attr('id') = setTimeout(function(){doSomethingHere},66);
}
);
提前致谢,最诚挚的问候。
答案 0 :(得分:0)
根据我的理解,您需要根据悬停元素保留对超时事件的引用,您可以使用.data()来执行此操作
我认为你在寻找的是
$("nav a").hover(function () {
clearTimeout($(this).data('mltimer'));
$(this).addClass('hvr');
}, function () {
var timer = setTimeout('doSoemthing()', 66);
$(this).data('mltimer', timer)
});