【发布时间】:2013-10-07 08:57:41
【问题描述】:
嘿嘿!
我可能在这里是个傻瓜,但我想不通;
我正在用 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。相反,我想“打印”超时名称的变量值。如果我使用固定的超时名称,一切都像一个魅力,但比每个链接只有一个(相同的)超时,它不会这样做。
有没有办法做到这一点?还是我跑题了?
这就是完整的功能:
$("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);
}
);
提前致谢,致以最诚挚的问候。
【问题讨论】:
-
无论您将使用什么作为解决方案:请永远不要使用字符串作为 setTimeout 的第一个参数。改用函数引用
setTimeout(doSomething, 66) -
感谢您指出这一点。我在原始代码中使用了一个函数,但想缩短它以获得更好的概览。不过可能还不够清楚,因此我编辑了上面的代码以避免将来产生误解。
标签: javascript jquery hover timeout settimeout