Jquery: задержка исчезновения и очисткиQueue не работает? - PullRequest
1 голос
/ 29 сентября 2010

Я не понимаю, почему этот код не работает:

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 секунд после первого вызова.

Не могли бы вы помочь мне?

(Извините за базовый английский, я стараюсь изо всех сил, как могу)

1 Ответ

3 голосов
/ 29 сентября 2010

.delay() является оберткой setTimeout(), поэтому очистка очереди просто никак на нее не влияет (по крайней мере пока, надеясь, что это изменится в будущем jQueryрелиз).Когда задержка установлена, .dequeue() вызывается , когда элемент завершается , когда он завершается.

Если вы хотите очистить это, вам нужно сохранить время ожидания самостоятельночто-то, что 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));
} 
...