如何通过切换 class 添加过渡动画?
How do I add an transition animation by toggling a class?
我有一些元素需要有条件地 highlighted/unhighlighted。
所以我有一个名为 highlight
的 class 给任何需要用过渡动画突出显示的元素。
问题是当 highlight
class 被移除后,我无法为其设置动画。
因为任何元素都可以突出显示,所以我找不到适合它们的特定选择器。
我可以这样做,但我觉得不合适:
* {
transition: background-color 1s;
}
有没有更好的实现方式?
这是一个演示我的问题的简化示例:
[...document.querySelectorAll('body *')].forEach(e => e.addEventListener('click', () => e.classList.toggle('highlight')));
.highlight {
background-color: red;
transition: background-color 1s;
}
<h2>Click anything to toggle highlight</h2>
<p>Hello</p>
<p>World</p>
<p>Thanks</p>
做不同的逻辑
[...document.querySelectorAll('body *')].forEach(e => e.addEventListener('click', function(e) {
e.target.classList.toggle('bg');
e.target.classList.add('highlight'); /* always add highlight */
}));
/* remove highlight when the transition is done */
[...document.querySelectorAll('body *')].forEach(e =>
e.addEventListener('transitionend', function(e) {
e.target.classList.remove('highlight');
})
);
.highlight {
transition: background-color 1s;
}
.bg {
background: red;
}
<h2>Click anything to toggle highlight</h2>
<p>Hello</p>
<p>World</p>
<p>Thanks</p>
我有一些元素需要有条件地 highlighted/unhighlighted。
所以我有一个名为 highlight
的 class 给任何需要用过渡动画突出显示的元素。
问题是当 highlight
class 被移除后,我无法为其设置动画。
因为任何元素都可以突出显示,所以我找不到适合它们的特定选择器。
我可以这样做,但我觉得不合适:
* {
transition: background-color 1s;
}
有没有更好的实现方式?
这是一个演示我的问题的简化示例:
[...document.querySelectorAll('body *')].forEach(e => e.addEventListener('click', () => e.classList.toggle('highlight')));
.highlight {
background-color: red;
transition: background-color 1s;
}
<h2>Click anything to toggle highlight</h2>
<p>Hello</p>
<p>World</p>
<p>Thanks</p>
做不同的逻辑
[...document.querySelectorAll('body *')].forEach(e => e.addEventListener('click', function(e) {
e.target.classList.toggle('bg');
e.target.classList.add('highlight'); /* always add highlight */
}));
/* remove highlight when the transition is done */
[...document.querySelectorAll('body *')].forEach(e =>
e.addEventListener('transitionend', function(e) {
e.target.classList.remove('highlight');
})
);
.highlight {
transition: background-color 1s;
}
.bg {
background: red;
}
<h2>Click anything to toggle highlight</h2>
<p>Hello</p>
<p>World</p>
<p>Thanks</p>