javascript - 通过 JS 触发的 CSS 动画仅每隔一次点击播放一次
问题描述
我想做一个简单的 JavaScript onclick 动画。我的问题是当我点击按钮时,动画被执行,但是当我再次点击按钮时,什么也没有发生。在第三次单击时,动画再次播放。我想做到这一点,动画在第二次点击时播放。这是我的代码”
var anim = document.getElementById("anim");
anim.onclick = function highA() {
var willCheck = document.getElementById("contactId");
if (!willCheck.classList.contains("highAnim")) {
willCheck.classList.add("highAnim");
} else {
willCheck.classList.remove("highAnim");
}
}
#contactId { background: red;}
.highAnim {
background-color: var(--white);
animation-name: highcheck;
animation-duration: 0.35s;
animation-timing-function: ease-in-out;
}
@keyframes highcheck {
0% {transform: rotate(0);}
25% {transform: rotate(1deg);}
50% {transform: rotate(2deg);}
75% {transform: rotate(1deg);}
100% {transform: rotate(0);}
}
<a onclick="anim()" id="anim">Click</a><br><br>
<div id="contactId">Some Text</div>
解决方案
问题是因为第一次单击添加了类并触发了动画,但之后的第二次(以及每个偶数单击)删除了该类,因此没有任何反应。
要解决此问题,您可以使用该animationend
事件在动画结束后自动删除该类。这样,当您下次再次单击时,该类将再次添加到元素中并播放动画。尝试这个:
var anim = document.getElementById("anim");
var willCheck = document.getElementById("contactId");
anim.addEventListener('click', () => {
willCheck.classList.add("highAnim");
});
willCheck.addEventListener('animationend', () => {
willCheck.classList.remove("highAnim");
});
#contactId { background: red; }
.highAnim {
background-color: var(--white);
animation-name: highcheck;
animation-duration: 0.35s;
animation-timing-function: ease-in-out;
}
@keyframes highcheck {
0% { transform: rotate(0); }
50% { transform: rotate(2deg); }
100% { transform: rotate(0); }
}
<a id="anim">Click</a><br><br>
<div id="contactId">Some Text</div>
请注意,我删除了动画中的25%
和项目,因为它是往返的75%
线性运动,因此不需要它们。这也有助于使动画更流畅。0%
50%
推荐阅读
- google-cloud-speech - 什么是谷歌云语音要求/先决条件
- assembly - 为什么 SIMD 比标量对应物慢
- python - 通过 API KEY 对 YouTube 数据 API v3 进行 Google 身份验证
- javascript - 如何更改html元素pre中特定文本的颜色?
- unicode - 6706:Teradata 中的不可翻译字符
- python - 如何获取keras中每个测试图像的IOU值?
- python - 为什么我的 for 循环不能正常工作(Python)
- python-3.x - 如果函数返回错误,如何替换单元格中的值
- javascript - Rock-Paper-Scissors:不记录分数
- node.js - 使用 Cognito UnAuth 角色时的 IAM 权限问题