我不明白为什么这段代码不起作用:
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消失...
你能帮帮我吗?
(对不起基本的英语,我正尽力做到最好)
答案 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));
}