【发布时间】:2018-08-28 10:37:46
【问题描述】:
Here is an example of my problem
我有一个div 和一个button。每次单击按钮时,div 会将其 background-color 更改为随机颜色。
button.addEventListener('click', function(e){
e.preventDefault();
setRandomColor();
});
默认情况下,div 有一个名为transition-on 的类,它将转换应用于background-color。
<div class="block transition-on"></div>
<button>Change</button>
CSS:
.transition-on {
transition: background-color 0.5s
}
如果我在应用随机 background-color 之前删除该类,然后重新应用该类,则转换仍然适用。
我的目的是在应用随机颜色时暂时移除过渡。
button.addEventListener('click', function(e){
e.preventDefault();
block.classList.remove('transition-on');
setRandomColor();
block.classList.add('transition-on');
});
有人知道为什么会这样吗?
编辑:
参考@ths 的答案-使用setTimeout 确实会产生我需要的结果,但现在我想知道为什么需要使用超时。
真的需要超时来临时禁用 CSS 转换吗?
- 移除过渡类
- 将颜色应用于块
- 重新添加过渡类
这应该在没有过渡的情况下从逻辑上改变颜色
【问题讨论】:
-
当你再次添加类时应用转换,而不是当你删除它时
-
@Jackson 看看我的回答,它可能会对你有所帮助。
-
超时不会禁用过渡,超时会使颜色更改在您添加类之前发生,因此您将类添加到颜色已更改的元素(无过渡)..没有超时两者将同时发生,时间,您添加颜色并且类在那里,因此转换将工作
-
@TemaniAfif - 它们可能(不太可能)或可能不会“同时”发生,DOM 事件的执行队列更有可能是一组同步事件?更多信息请访问stackoverflow.com/q/779379/125981
-
@MarkSchultheiss 我使用了 same time 这个词,因为我无法以不同的方式表达它,因为它有点复杂,而您提供的链接是我正在尝试的问题之一找到重复...所以我猜他可以知道理解背后的复杂逻辑并理解我的意思 same time
标签: javascript css