【发布时间】:2022-01-11 06:30:04
【问题描述】:
正如this question 所观察到的,新附加元素上的即时 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(包括原版 JS 示例)。
- 为什么会忽略附加元素上的即时 CSS 动画?
- 这些方法如何以及为何起作用?
- 还有其他方法吗
- 哪个(如果有)是首选解决方案?
【问题讨论】:
-
好问题,由于脚本引擎优化了您的代码,因此动画可能迫在眉睫。
标签: javascript css dom