JavaScript / CSS:向DOM添加元素与应用CSS规则之间的延迟?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了JavaScript / CSS:向DOM添加元素与应用CSS规则之间的延迟?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1611字,纯文字阅读大概需要3分钟。
内容图文
![JavaScript / CSS:向DOM添加元素与应用CSS规则之间的延迟?](/upload/InfoBanner/zyjiaocheng/784/8929c3c60f7a479296fe982e6e4160fe.jpg)
我正在使用JavaScript动态地向DOM添加元素.我希望在添加元素时使用CSS3过渡来“淡入”元素.
我正在使用类似下面的内容来实现此目的:
function add(el) {
el.className += ' fader';
el.style.opacity = 0;
document.getElementById('parent-element').appendChild(el);
//setTimeout(function () { el.style.opacity = 1; }, 5);
el.style.opacity = 1;
}
而CSS:
.fader {
-webkit-transition: opacity 0.5s;
}
这不能按预期工作 – 元素不会淡入.如果我替换行el.style.opacity = 1;使用setTimeout(function(){el.style.opacity = 1;},5);,如上所述,它可以按预期工作.
我猜测第一种情况不起作用,因为添加元素和应用于它的适当CSS规则之间存在一些延迟.在第二种情况下由setTimeout创建的5ms延迟为这些规则提供了足够的时间,因此淡入淡出按预期发生.
首先,这是一个正确的假设吗?其次,有没有更好的方法来解决这个问题? setTimout感觉就像一个黑客.是否有一些事件在元素应用了所有样式后被触发?
解决方法:
要使CSS3过渡工作,对象必须存在于特定状态,然后您必须对触发转换的对象进行更改.
由于各种原因,我对CSS3过渡的所有经验都向我展示了一个对此非常重要的状态只是当你的javascript返回并且浏览器返回其事件循环时它存在的状态.就好像,你可以告诉浏览器现在循环访问你的对象并记住它未来转换的状态的唯一方法就是回到浏览器事件循环.有一些编程原因可能是这种情况(所以它不会尝试执行转换,因为您以编程方式构建对象并更改它),但这些问题可能已经以不同的方式解决(比如使用特定的方法调用)现在编纂对象),但并没有这样做.
因此,您的解决方案就是我发现的方式.在其初始状态中创建对象.设置一个非常短的持续时间.从你的所有javascript返回,以便对象将在其初始状态下编码,因此计时器可以触发.在timer事件中,向触发CSS3转换的对象添加一个类.
我真的不知道CSS3过渡是否在规范中以这种方式指定,但我在Safari,Firefox和Chrome中的经验是它们的工作方式.
内容总结
以上是互联网集市为您收集整理的JavaScript / CSS:向DOM添加元素与应用CSS规则之间的延迟?全部内容,希望文章能够帮你解决JavaScript / CSS:向DOM添加元素与应用CSS规则之间的延迟?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。