我最近了解到,一种在单击按钮时播放动画的方法是使用
myObject.classList.add('animationClass')
向其附加动画类。但是,此方法仅在第一次单击按钮时有效——因为动画类保留在 HTML 对象中。
我想,如果我在函数开始时使用
myObject.classList.Remove('animationClass')
,我可以用我的按钮实现可重复性。
玩过这个函数后,似乎每当我实现删除类的行时,添加它的行就会被覆盖并且没有播放动画。
这是我最初尝试的代码:
myButton = document.getElementById('switchButton')
myButton.classList.remove('animationClass'); //remove the class, from previous clicks
myButton.classList.add('animationClass'); //add the class to play animation
.animationClass {
animation: rotate forwards 1s;
}
@keyframes rotate {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(360deg);
}
}
<button class="" id="switchButton" onclick="switchFunction()">Switch</button>
然后我尝试使用
myObject.classList.remove
延迟实现 setTimeout
,但无济于事。
JS
myObject.classList.add('animationClass');
setTimeout(function(){myObject.classList.remove('animationClass')},2s);
你基本上只是犯了一个小错误。你必须写
2000
(毫秒)而不是2s
.
但是,我建议您使用
animationend
-Listener。
switchFunction = function() {
myButton=document.getElementById('switchButton')
myButton.classList.add('animationClass'); //add the class to play animation
setTimeout(function(){myButton.classList.remove('animationClass')}, 2000);
}
.animationClass{
animation: rotate forwards 1s;
}
@keyframes rotate{
0%{transform: rotate(0deg);}
100%{transform: rotate(360deg);}
}
<button class="" id="switchButton" onclick="switchFunction()">Switch</button>
myButton=document.getElementById('switchButton')
myButton.addEventListener("animationend", () => myButton.classList.remove('animationClass'));
switchFunction = () => myButton.classList.add('animationClass'); //add the class to play animation
.animationClass{
animation: rotate forwards 1s;
}
@keyframes rotate{
0%{transform: rotate(0deg);}
100%{transform: rotate(360deg);}
}
<button class="" id="switchButton" onclick="switchFunction()">Switch</button>