appendChild 很慢
appendChild is slow
Javascript:
var wrapper = document.getElementById("wrapper");
var div = document.createElement("div");
wrapper.appendChild(div);
div.className += " red"; // this should happened after appendChild()
CSS:
div{color:blue; transition: all 2s;}
div.red{color:red;}
我想要的:
将 "red" class
分配给 div
,应该可以制作漂亮的彩色动画。我想 append
一个 div
,然后分配一个 class
,这样它就会有动画。
我得到了什么:
Div 已附加红色,没有动画进行。
有什么解决方法吗?
当您在 Javascript 中进行 DOM 更改时,它们会在 returns 到主事件循环时立即全部呈现。看不到中间值。
您可以使用setTimeout()
在代码returns后添加red
class。
setTimeout(function() {
div.className += " red";
}, 10);
您可以设置超时来延迟添加 .red
class。
setTimeout(function () {
div.className += " red";
}, 0);
Javascript 不是多线程。
DOM 在执行 js 代码时没有任何反应。
您应该延迟执行动画的事件循环:
setTimeout(function() {
div.className += " red";
}, 0/*or other amount of ms*/);
您尝试过使用 css 动画吗?
我建议这样:
// css
div {
animation: toRed 2s ease-out;
animation-fill-mode: forwards;
width: 200px; height: 200px;
}
@keyframes toRed {
0% { background-color: blue; }
100% { background-color: red; }
}
// javascript
var wrapper = document.getElementById("wrapper");
var div = document.createElement("div");
wrapper.appendChild(div);
这样您就不必跟踪额外的 class。
Javascript:
var wrapper = document.getElementById("wrapper");
var div = document.createElement("div");
wrapper.appendChild(div);
div.className += " red"; // this should happened after appendChild()
CSS:
div{color:blue; transition: all 2s;}
div.red{color:red;}
我想要的:
将 "red" class
分配给 div
,应该可以制作漂亮的彩色动画。我想 append
一个 div
,然后分配一个 class
,这样它就会有动画。
我得到了什么:
Div 已附加红色,没有动画进行。
有什么解决方法吗?
当您在 Javascript 中进行 DOM 更改时,它们会在 returns 到主事件循环时立即全部呈现。看不到中间值。
您可以使用setTimeout()
在代码returns后添加red
class。
setTimeout(function() {
div.className += " red";
}, 10);
您可以设置超时来延迟添加 .red
class。
setTimeout(function () {
div.className += " red";
}, 0);
Javascript 不是多线程。
DOM 在执行 js 代码时没有任何反应。
您应该延迟执行动画的事件循环:
setTimeout(function() {
div.className += " red";
}, 0/*or other amount of ms*/);
您尝试过使用 css 动画吗?
我建议这样:
// css
div {
animation: toRed 2s ease-out;
animation-fill-mode: forwards;
width: 200px; height: 200px;
}
@keyframes toRed {
0% { background-color: blue; }
100% { background-color: red; }
}
// javascript
var wrapper = document.getElementById("wrapper");
var div = document.createElement("div");
wrapper.appendChild(div);
这样您就不必跟踪额外的 class。