【问题标题】:jQuery show hide delay still running after mouse is away鼠标离开后jQuery显示隐藏延迟仍在运行
【发布时间】:2014-04-06 10:54:30
【问题描述】:

我将 .delay() 设置为停止在每只鼠标上显示效果,但现在它在每只鼠标上都显示只是延迟。

似乎 .delay() 不是识别鼠标悬停在该部分之后显示的最短时间的正确方法。

$(document).ready(function(){
    $('.article_wrapper').hover(
    function(){
        $(this).find('.actions').delay(800).show(300);
    },
    function(){
         $(this).find('.actions').hide(200);
    });

});

我还可以使用哪些其他功能?

【问题讨论】:

    标签: javascript jquery


    【解决方案1】:

    在 jQuery 1.9+ 上,您可以使用 finish() 清除之前应用于特定队列的所有延迟: (尽管这仍然没有记录)

    DEMO

    更新: 确实,为了不破坏隐藏动画,你应该使用clearQueue()

    $(document).ready(function(){
        $('.article_wrapper').hover(
        function(){
            $(this).find('.actions').delay(800).show(300);
        },
        function(){
            $(this).find('.actions').clearQueue().hide(200);
        });
    });
    

    【讨论】:

    • 你拯救了我的一天!感谢您的帮助;)
    • 如果没有动画链接,使用.stop(true,true) 就足够了,但.finish() 是面向未来的(如果您要添加更多动画)。
    【解决方案2】:

    不幸的是,这是一个有点烦人的问题。解决这个问题的正确方法是使用“setTimeout”,这里有更详细的解释。 Trying to add delay to jQuery AJAX request

    这可以根据您的需要轻松修改。

    编辑

    正如更好的答案所指出的,这对于动画来说不是必需的,我将把它留在这里,因为它与大多数非动画延迟有关。

    【讨论】:

    • 我不会使用setTimeout,因为它的实现比使用简单的.finish().stop() 更复杂。
    • 我完全同意,A. Wolff 的答案要好得多。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-27
    相关资源
    最近更新 更多