jQuery Animation Queue和.stop(true)

时间:2012-01-10 16:32:35

标签: jquery jquery-animate drop-down-menu

首先 - 这里的最终目标是创建我自己的下拉菜单来学习jQuery。如果我在导航按钮上移动和移动鼠标的速度过快,动画队列就会建立起来并且停止后动画会持续几秒钟。我找到了几个论坛帖子,表明 .stop(true)是jQuery动画队列构建问题的解决方案。但是,在声明中使用多个动画时似乎无法解决我的问题。

这是代码(我省略了CSS。)

<html>
<head>
<title>My First DropDown Menu</title>
<script language="javascript" src="js/jquery-1.7.1.min.js"></script>
<script language="javascript" src="js/jquery-ui-1.8.16.custom.min.js"></script>
<link rel="stylesheet" type="text/css" href="css/menu.css" />

<script language="javascript">
    $(document).ready(function() {
        $("div.bSlider ul li").hover(function() {
            $(this).stop(true, true).animate({ backgroundColor: "#898989", color: "#d01d33" }, 500, function() {}).find("ul").slideDown(200, function(){});
        }, function() {
            $(this).stop(true, true).animate({ backgroundColor: "#d01d33", color: "#ffc074"}, 0, function() {}).find("ul").slideUp(100, function(){});
        });
    });
</script>

</head>

<body>
<div class="bSlider">
    <ul>
        <a href="#"><li>Menu Item #1</li></a>
        <a href="#"><li>Menu Item #2</li></a>
        <a href="#"><li>Menu Item #3</li></a>
        <a href="#"><li>Menu Item #4</li></a>
        <a href="#"><li>Menu Item #5
            <ul>
                <a href="#"><li>Sub-menu Item #1</li></a>
                <a href="#"><li>Sub-menu Item #2</li></a>
                <a href="#"><li>Sub-menu Item #3</li></a>
                <a href="#"><li>Sub-menu Item #4</li></a>
            </ul>
        </li></a>
        <a href="#"><li>Menu Item #6</li></a>
    </ul>
</div>
</body>

</html>

1 个答案:

答案 0 :(得分:2)

您需要添加额外的.stop(true,true)才能停止滑行/滑行部分。

http://jsfiddle.net/Tentonaxe/kZ78R/

$(document).ready(function() {
    $("div.bSlider ul li").hover(function() {
        $(this).stop(true, true).animate({ backgroundColor: "#898989", color: "#d01d33" }, 500, function() {}).find("ul").stop(true,true).slideDown(200, function(){});
    }, function() {
        $(this).stop(true, true).animate({ backgroundColor: "#d01d33", color: "#ffc074"}, 0, function() {}).find("ul").stop(true,true).slideUp(100, function(){});
    });
});

编辑:其他信息

您需要第二个.stop()的原因是因为.stop()仅停止所选元素的动画,而不是它的子动画。由于<ul>是所选元素的子元素,因此动画未停止。