的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;}
我想要的是什么:
将“红色”class
分配给div
,应该制作漂亮的色彩动画。我想append
一个div
,然后分配一个class
,这样它就会动画。
取而代之的是:
Div已经附加了红色,没有动画。
有解决方法吗?
答案 0 :(得分:3)
Javascript不是多线程的。
在执行js代码时,DOM没有发生任何事情。
您应该将执行延迟到动画的事件循环:
setTimeout(function() {
div.className += " red";
}, 0/*or other amount of ms*/);
答案 1 :(得分:2)
当您在Javascript中进行DOM更改时,它们会在返回主事件循环时立即呈现。没有看到中间值。
您可以在代码返回后使用red
添加setTimeout(function() {
div.className += " red";
}, 10);
类。
.red
答案 2 :(得分:1)
您可以设置超时以延迟添加setTimeout(function () {
div.className += " red";
}, 0);
类。
My controller:
$class = new joinclass();
$class -> user_id = Auth::user()->id;
$class -> class_code = $request['class_code'];
$class -> save();
答案 3 :(得分:1)
您是否尝试过使用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);
这样你就不必跟踪额外的课程。