Как этот вопрос наблюдается, немедленные переходы CSS на вновь добавленные элементы игнорируются - конечное состояние перехода отображается немедленно.
Например, данный CSS (префиксы опущены здесь):
.box {
opacity: 0;
transition: all 2s;
background-color: red;
height: 100px;
width: 100px;
}
.box.in { opacity: 1; }
Прозрачность этого элемента будет немедленно установлена в 1:
// Does not animate
var $a = $('<div>')
.addClass('box a')
.appendTo('#wrapper');
$a.addClass('in');
Я видел несколько способов запуска перехода для получения ожидаемого поведения:
// Does animate
var $b = $('<div>')
.addClass('box b')
.appendTo('#wrapper');
setTimeout(function() {
$('.b').addClass('in');
},0);
// Does animate
var $c = $('<div>')
.addClass('box c')
.appendTo('#wrapper');
$c[0]. offsetWidth = $c[0].offsetWidth
$c.addClass('in');
// Does animate
var $d = $('<div>')
.addClass('box d')
.appendTo('#wrapper');
$d.focus().addClass('in');
Те же самые методы применимы к манипуляциям с манипуляциями с JS DOM в ванили - это не поведение, специфичное для jQuery.
Изменить. Я использую Chrome 35.
JSFiddle (включает пример Vanilla JS).
- Почему немедленные анимации CSS на присоединенных элементах игнорируются?
- Как и почему эти методы работают?
- Есть ли другие способы сделать это
- Какой, если таковой имеется, является предпочтительным решением?