Jquery .delay().fadeOut отменить/очистить очередь. Возможно ли это? Как?

Мне нужна помощь здесь .. Можно ли отменить задержку цепочки?

Mn.Base.TopBox.show = function(timedur){
    $('#element').fadeIn().delay(timedur).fadeOut();
}


Mn.Base.TopBox.cancelFadeout = function(){

}

Я читал об очередях и пробовал разные подходы, но у меня не было успеха...

    $('#element').stop();

    $('#element').queue('fx', []);

Заранее спасибо,

Педро


person Pedro Gil    schedule 05.10.2010    source источник


Ответы (1)


Это не так, .delay() плохо сочетается ни с чем другим, так как таймер продолжает тикать, а < a href="http://api.jquery.com/dequeue/" rel="noreferrer">.dequeue() выполняется, когда он работает... независимо от того, очистили ли вы очередь и добавили совершенно новую.

Лучше использовать setTimeout() напрямую, если вы собираетесь отменить, например:

Mn.Base.TopBox.show = function(timedur){
  $('#element').fadeIn(function() {
    var elem = $(this);
    $.data(this, 'timer', setTimeout(function() { elem.fadeOut(); }, timedur));
  });
}

Mn.Base.TopBox.cancelFadeout = function(){
  clearTimeout($('#element').stop().data('timer'));
}

Это устанавливает таймер и сохраняет его с помощью $.data(), а при обработке анимации мы оба вызывают .stop(), чтобы остановить что-либо в процессе, и останавливают этот таймер .

Здесь все еще есть потенциал для проблем, если вы запускаете это очень быстро, и в этом случае вам нужно переключиться на хранение массива задержек и очистить их все.

person Nick Craver    schedule 05.10.2010