jQuery使用快速鼠标移动设置打断动画!

jQuery使用快速鼠标移动设置打断动画!,jquery,jquery-animate,Jquery,Jquery Animate,jQuery的一个问题困扰了我很长时间,我想最终找到一个解决方案。拥有此代码: 如果我在所有对象中快速移动鼠标,动画就会中断,因为它不会完全展开。我怎样才能不发生这种事呢 我尝试了“stop(true,true)”,但这会使动画失去平滑度,因为它会跳到动画队列的末尾 谢谢。我用了。停止(真的,真的),它似乎可以工作 动画看起来仍然平滑 演示:我已经使用了。停止(true,true),它似乎工作正常 动画看起来仍然平滑 演示:我对你所说的“失去平滑”的意思有点困惑-它在我看来仍然是平滑的:我对你

jQuery的一个问题困扰了我很长时间,我想最终找到一个解决方案。拥有此代码:

如果我在所有对象中快速移动鼠标,动画就会中断,因为它不会完全展开。我怎样才能不发生这种事呢

我尝试了“stop(true,true)”,但这会使动画失去平滑度,因为它会跳到动画队列的末尾

谢谢。

我用了
。停止(真的,真的)
,它似乎可以工作

动画看起来仍然平滑

演示:

我已经使用了
。停止(true,true)
,它似乎工作正常

动画看起来仍然平滑


演示:

我对你所说的“失去平滑”的意思有点困惑-它在我看来仍然是平滑的:

我对你所说的“失去平滑”的意思有点困惑-它在我看来仍然是平滑的:

我认为他的意思是,如果他快速地来回移动鼠标,他不希望动画无限叠加。但是,执行
.stop()
操作将导致当前动画立即停止,而不是让当前动画继续运行并从队列中删除其余动画。执行
.stop(true,true)
将跳转到当前动画的结尾并从那里继续

我认为OP想要的是让当前动画运行,然后开始下一个动画,而不是在鼠标快速移动的情况下无限叠加动画

实现这一点的一种方法是自己跟踪当前正在制作动画的元素。这显示了实现您想要的目标的一种方法:

编辑

在澄清之后,我又举了一个例子。这基本上可以防止在通过
slideDown()
slideUp()
设置动画的元素上使用
stop()
将高度弄乱

诀窍是自己用
.animate()
制作动画,并自己跟踪原始高度


我认为他的意思是,如果他快速地将鼠标移过来移出去,他不希望动画无限叠加。但是,执行
.stop()
操作将导致当前动画立即停止,而不是让当前动画继续运行并从队列中删除其余动画。执行
.stop(true,true)
将跳转到当前动画的结尾并从那里继续

我认为OP想要的是让当前动画运行,然后开始下一个动画,而不是在鼠标快速移动的情况下无限叠加动画

实现这一点的一种方法是自己跟踪当前正在制作动画的元素。这显示了实现您想要的目标的一种方法:

编辑

在澄清之后,我又举了一个例子。这基本上可以防止在通过
slideDown()
slideUp()
设置动画的元素上使用
stop()
将高度弄乱

诀窍是自己用
.animate()
制作动画,并自己跟踪原始高度


它在没有.stop()的情况下工作得很好,这样它可以堆叠动画…在没有.stop()的情况下工作得很好,这样它可以堆叠动画…你是对的。你所描述的方式的问题是,如果我快速进入和退出元素,子菜单仍然完全展开,我更希望它在我制作mouseleve时停止展开。这完全符合我的要求!:)为什么“var height=$subMenu.height();”在“display:none;”中不返回“0”??jQuery会在获取高度之前将其更改为可见,然后立即恢复初始状态。这会让你更容易,所以你不必担心自己会再次将其切换为可见/获得高度/隐藏。如果您对jQuery的工作方式感兴趣;它使用
jQuery.swap
来实现它。在中搜索以
swap:
开头的行,您是对的。你所描述的方式的问题是,如果我快速进入和退出元素,子菜单仍然完全展开,我更希望它在我制作mouseleve时停止展开。这完全符合我的要求!:)为什么“var height=$subMenu.height();”在“display:none;”中不返回“0”??jQuery会在获取高度之前将其更改为可见,然后立即恢复初始状态。这会让你更容易,所以你不必担心自己会再次将其切换为可见/获得高度/隐藏。如果您对jQuery的工作方式感兴趣;它使用
jQuery.swap
来实现它。在元素之间快速移动鼠标,搜索以
swap:
开头的行,您将看到一个跳转到动画队列的末尾。我不希望:(在元素之间快速移动鼠标,您将看到一个跳转到动画队列的末尾。我不希望:(在元素之间快速移动鼠标,您将看到一个跳转到动画队列的末尾。我不希望这样。在元素之间快速移动鼠标,您将看到一个跳转到动画队列的末尾。我不希望这样。
$(document).ready(function(){

    $("ul.first li").mouseenter(function(){
        $("ul", this).slideDown();
    });
    $("ul.first li").mouseleave(function(){
        $("ul", this).slideUp();
    });

});