首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >appendChild慢

appendChild慢
EN

Stack Overflow用户
提问于 2016-08-27 13:49:10
回答 4查看 932关注 0票数 2

Javascript

代码语言:javascript
复制
var wrapper = document.getElementById("wrapper");
var div = document.createElement("div");
wrapper.appendChild(div);
div.className += " red"; // this should happened after appendChild()

CSS:

代码语言:javascript
复制
div{color:blue; transition: all 2s;}
div.red{color:red;}

我想要的:

将一个“红色”class分配给div,应该可以制作漂亮的彩色动画。我想要append一个div,然后分配一个class,这样它就会有动画。

我得到了什么而不是

Div已经被附加到红色,没有动画进行。

有什么解决办法吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-08-27 14:02:29

你试过用css动画代替吗?

我建议你这样做:

JSBIN

// css

代码语言:javascript
复制
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

代码语言:javascript
复制
var wrapper = document.getElementById("wrapper");
var div = document.createElement("div");
wrapper.appendChild(div);

这样,您不一定需要跟踪一个额外的类。

票数 1
EN

Stack Overflow用户

发布于 2016-08-27 13:55:04

Javascript不是多线程。

在执行js代码时,DOM没有发生任何事情。

对于动画,应该将执行延迟到事件循环:

代码语言:javascript
复制
setTimeout(function() {
  div.className += " red";
}, 0/*or other amount of ms*/);
票数 3
EN

Stack Overflow用户

发布于 2016-08-27 13:53:48

当您在Javascript中进行DOM更改时,当DOM返回到主事件循环时,它们都会立即呈现。中间值看不见。

可以在代码返回后使用setTimeout()添加red类。

代码语言:javascript
复制
setTimeout(function() {
    div.className += " red";
}, 10);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39181872

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档