jQuery延迟非效果?

时间:2011-09-19 17:56:49

标签: jquery css

坚持我,我正在处理预先存在的代码,并试图不必对代码进行大修。

我正在处理翻转弹出菜单,弹出窗口需要500毫秒的延迟。完成疯狂的CSS黑客攻击:

#nav ul li ul {
  left: -9999999px;
}

#nav ul :hover ul {
  left: auto;
}   

<div id="nav">
   <ul>
     <li>Link here</li>
     <ul>Some popup content</ul>
   </ul>
</div>

所以我杀了“#nav ul:hover ul”CSS定义并在jQuery中编写了一个基本的单行程序

$("#nav ul li").live("mouseover", function () {$(this).children("ul").css("left", "auto"); return false})

其中模拟原始代码,除了现在JS控件

之外

然后我在逻辑上,添加延迟,开始乱搞setTimeout

$("#nav ul li").live("mouseover", function () {setTimeout(function() {$(this).children("ul").css("left", "auto");} return false}, 500))

另外,还有很多其他组合。通过setTimeout发送$(this)似乎很麻烦。我尝试研究.delay(),但它似乎只对效果队列有好处,而且我不确定如何将效果队列集成到这里以使一切看起来都很好。所以任何帮助将不胜感激

2 个答案:

答案 0 :(得分:1)

为什么不使用.hoverIntent()

答案 1 :(得分:1)

见这个jsfiddle。

http://jsfiddle.net/wHBK8/1/

我不得不使用display:none代替jsfiddle的左方法,因为它不适用于左边。

此外,您的内部ul不在css中指定的li中。

以下是将鼠标悬停时引用的方法传递给setTimeout。

$("#nav ul li").live("mouseover", function () {
    var that= $(this);
    setTimeout(function() {that.children("ul").show();}, 5000);
    return false;
});