jQuery : delay fadeOut & clearQueue doesn't work?

标签 jquery queue delay settimeout

我不明白为什么这段代码不起作用:

function Messages(type,text) {
    console.log("In function Message");
    $("#message").clearQueue();
    console.log("clearQueue :"+$("#message").queue("fx").length+" effet in queue");

    if($("#message").length > 0 && $("#message").not(":visible").length == 1) {
         $("#message").slideDown("slow");
    }

    $("#message").queue(function(){
         $(this).delay(5000).fadeOut("slow");
         $(this).dequeue();
    });
    console.log("Adding  "+$("#message").queue("fx").length+" effet in queue");
 } 

这是控制台日志:

 In function Message
 1346clearQueue :0 effet in queue
 1356Adding  2 effet in queue

但似乎clearQueue不起作用,因为我有这个:

消息出现,他在 5 秒后消失..

消息出现,4秒后,我再次调用“消息”,1秒后#Message消失。

因此,如果多次调用 Message,延迟不会改变,并且 #Message 在第一次调用后始终会消失 5 秒。

最佳答案

.delay()setTimeout()包装器,因此清除队列对它根本没有任何影响(至少现在还没有,希望这在未来的 jQuery 版本中有所改变)。当设置延迟时,.dequeue()called on the element当它完成时。

如果你想清除这个,你需要自己存储超时,这是 jQuery 目前在内部不做的事情。自己做看起来像这样:

function Messages(type,text) {
    var msg = $("#message");
    //clear old timer
    clearTimeout(msg.data("timer"));
    //clear previous queue
    msg.clearQueue();

    if(msg.filter(":hidden").length == 1) msg.slideDown("slow");

    //set and store a new timer
    msg.data("timer", setTimeout(function() { msg.fadeOut("slow"); }, 5000));
} 

关于jQuery : delay fadeOut & clearQueue doesn't work?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3819546/

相关文章:

javascript - 如何将 Backbone 模型与 jQuery 相关的范围一起使用

laravel - 如何使作业失败并使其跳过 Laravel 队列中的下一次尝试?

Java:使用工厂实例化 T 类型的数组对象

javascript - 使用 Javascript 检查日期是否为给定格式

javascript - CSS 子级宽度由光标在父级上的位置决定

javascript - Web服务错误捕获(Jquery + asp.net Web服务)

objective-c - 串行调度队列中的 block 未执行 - GCD iOS Objective-C

java - JPanel在使用延迟时不会实时更新

java - 定时器在 Java 中加速

javascript - Vegas 幻灯片插件 - 如何延迟幻灯片开始的时间?