2010-09-29 84 views
1

我不明白为什么这个代码不工作:Jquery:延迟fadeOut&clearQueue dosn't工作?

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消失在一秒钟之后。

所以,如果消息被称为一个以上的时间,dosn“T改变和#Message在前看不见的延迟百达5秒,第一个电话后..

你能帮助我吗?

(对不起,基本的英语,我想尽我所能做到最好)

回答

3

.delay()是一个setTimeout()包装,所以清除队列根本就没有任何影响当设置延迟时,.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)); 
} 
+0

谢谢它的作品! (学到的另一件新事物) – Crupuk 2010-09-29 09:38:13

+0

@Crupuk - 欢迎:) – 2010-09-29 09:38:54