【发布时间】:2011-08-23 12:45:14
【问题描述】:
我是 jQuery 新手,我做的第一件事是我想象中的经典任务:为下拉菜单设置动画。 #navBar 是一个包含 ul 的 div,当用户将鼠标悬停在 li 上时菜单会下拉。代码如下:
$(document).ready(function()
{
$("#navBar>ul>li").hover(function()
{
var $menu = $(this).find("div");
if ($menu.queue().length > 1) $menu.queue().length = 1;
$menu.slideDown(200).css("z-index", "1");
},
function()
{
$(this).find("div").delay(500).slideUp(400).css("z-index","0");
});
});
我的问题是指这一行:
if ($menu.queue().length > 1) $menu.queue().length = 1;
我这样做是为了避免无休止的动画排队的问题,同时避免使用 stop(true, true) 的跳跃性。这非常有效,但我对显式分配队列长度感到不安(我熟悉的其他编程语言都不允许我这样做)。
我担心的是,通过分配长度,我只是限制了 jQuery 的队列走多远,但实际上并没有删除队列中的动画,并可能导致内存泄漏。我实际上想做的只是删除第一个以外的所有排队动画,但似乎找不到这样做的方法。
无论如何,正如我所说,它现在表现完美。谁能告诉我我是不是在做傻事?
【问题讨论】:
-
我不能 100% 确定分配给长度会达到什么效果,但可能建议不要这样做。它所做的只是返回数组/集合中的项目数,所以如果它在您的示例中工作,我想它可能会弹出项目,这可能会在以后给您带来问题。使用类似于下面 Shankar 的东西,如果你打算使用 jQuery,你最好让它做尽可能多的工作——通常会使代码更干净、更快
-
是的,我同意,但就像我说的,到目前为止,这是唯一真正提供了所需行为的东西。我会推荐它,如果我能确定我没有破坏什么。我已经测试了很多,没有任何问题,但很高兴知道它没问题