【发布时间】:2013-05-21 12:32:57
【问题描述】:
这是一个例子:http://dabblet.com/gist/5652844
我正在创建一个新元素,设置一个类,将其附加到父级并立即切换类,以便触发转换。像这样:
var div = document.createElement("div");
div.setAttribute("class", "left");
document.body.appendChild(div);
div.setAttribute("class", "right");
这些类只是设置了一个left 值,而 div 具有transition: left .5s ease;。
现在,由于某种未知原因,只有当我在第二个 setAttribute() 之前添加一个短暂的延迟(10-20 毫秒似乎有效)时才会触发转换。
我的问题是:有没有更清洁的方法来做到这一点?我试过 jQuery 的 append 和 addClass,它们显示了相同的行为。 jQuery UI 的switchClass 似乎可以工作,但没有更好的方法来代替依赖随机延迟值吗?
【问题讨论】:
-
我猜是因为没有延迟,浏览器就没有机会进行初始绘制,这会给元素一些过渡的地方。当 JavaScript 完成后,浏览器绘制元素,它只看到它有
right类,而从未意识到left。 -
是的,这也是我的怀疑。看起来好像元素被添加到 DOM 中
class="right"。我不认为有一个神奇的事件或回调可以让您知道元素何时在 DOM 中并完成绘制? -
不,不会有回调。由于浏览器视图响应 JavaScript 的操作,但不是 JavaScript 的一部分,因此您只需让您的 JS 与 UI 配合即可达到您需要的效果。让类更改一个在短时间后发生的异步操作(就像你正在做的那样)可能是你最好的选择。
标签: javascript css css-transitions transition