考虑这样的div:
<div id="someid"></div>
它的风格:
#someid {
transition: background-color 10s ease;
background-color: #FF0000;
height: 100px;
width: 100px;
}
#someid:hover {
background-color: #FFFFFF;
}
我想通过JS检测#someid
的状态(当前是否正在动画化(和/或结束动画(如果可能的话(。我从这个答案中尝试了一件事:
document.querySelector("#someid").style.transition = "none";
但它不适用于当前动画元素。
关键是我需要检测元素现在是否正在制作动画,如果是,请等待动画结束或立即结束,否则什么都不做
我已经找到了transitionend
事件,但使用它我无法检测元素是否正在动画化。
您可以监听转换事件并根据需要删除它:
const el = document.getElementById('transition');
let isAnimating = false;
el.addEventListener('transitionstart', function() {
isAnimating = true;
});
el.addEventListener('transitionend', () => {
isAnimating = false;
});
el.addEventListener('transitioncancel', () => {
isAnimating = false;
});
function removeTransition(checkIfRunning) {
if (checkIfRunning && !isAnimating) {
return;
}
el.style.transition = "none";
}
#transition {
width: 100px;
height: 100px;
background: rgba(255, 0, 0, 1);
transition-property: transform background;
transition-duration: 2s;
transition-delay: 1s;
}
#transition:hover {
transform: rotate(90deg);
background: rgba(255, 0, 0, 0);
}
<div id="transition">Hello World</div>
<br />
<button onclick="removeTransition(false)">Remove Transition</button>
<br />
<br />
<button onclick="removeTransition(true)">Remove Transition on if running</button>