2

Я хочу добавить элемент в DOM, а затем добавить класс с переходом для применения скользящего эффекта. В настоящее время я использую setInterval() с задержкой 0, в противном случае переход не произойдет (demo):Используйте jQuery.queue вместо setTimeout

var $block = $('<div/>', {class: 'block'}); 

$('body').append($block); 

setTimeout(function() { 
    $block.addClass('shifted'); 
}, 0); 

Я хочу использовать jQuery.queue вместо этого, но с моим нынешним подходом он не работает: добавление элемента и добавление класса происходит сразу, поэтому переход не отображается.

$('body') 
    .append($block) 
    .queue(function() { 
     $block.addClass('shifted'); 
    }); 
+0

'class' является зарезервированным словом в JS, поэтому ваш литерал объекта должен использовать строку в качестве ключа (т. Е.' {'Class': 'block'} '). – zzzzBov

+0

[Зарезервированные слова действительны только для идентификаторов] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Reserved_Words#Reserved_word_usage), а имя свойства - это идентификатор. Это не должно вызывать никаких проблем со стороны спецификации. – Pavlo

ответ

2

Если тайм-аут требуется, чтобы анимация происходит, то вы должны добавить delay:

$('body') 
    .append($block) 
    .delay(0) 
    .queue(function (next) { 
     $block.addClass('shifted'); 
     next(); //don't forget to dequeue so that the rest of the queue can run 
    }); 

.delay() действительно просто удобный метод для:

.queue(function (n) { 
    setTimeout(n, duration); 
}); 

Если вы не вызывайте delay (или ставьте тайм-аут), очередь fx будет выполняться немедленно, что побеждает цель очередей $block.addClass('shifted').

+0

Возможно, тогда выйдет «очередь»? Просто «append» - 'delay' -' addClass'? – Pavlo

+1

'addClass' не добавляет себя в очередь fx. Я хочу сказать, что без вызова функции 'delay' ваш код работает тождественно с' $ block.appendTo ('body'). AddClass ('shifted'); '. Чтобы заставить его запускать 'addClass' после таймаута, вам нужно как-то задержать задержку. – zzzzBov

Смежные вопросы