正如 这个问题所观察到的,在新添加的元素上立即的 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');
同样的方法也适用于普通的 JSDOM 操作——这不是特定于 jQuery 的行为。
编辑-我正在使用 Chrome 35。
JSFiddle (包括香草 JS 示例)。