Jquery:延迟fadeOut& clearQueue不起作用?

时间:2010-09-29 07:24:57

标签: 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秒后,我再次调用“消息”,#Message在一秒钟后消失。

因此,如果多次调用Message,则在第一次调用后5秒内延迟dost“t更改并且#Message消失...

你能帮帮我吗?

(对不起基本的英语,我正尽力做到最好)

1 个答案:

答案 0 :(得分:3)

.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));
}