如何解决如何重新触发包含setTimeout回调和动画的click元素
在下面的示例中,我设法突出显示了一个单击的div元素及其父元素,然后以相同的顺序将它们设置为白色,并且每个元素之间稍有延迟(请尝试一下代码段)。
我要添加的是,如果用户在整个动画(突出显示并变为白色,基本上返回初始状态)结束之前再次单击div元素之一,则应重新启动动画
解决方法
您可以存储setTimeout返回的所有ID,然后在再次单击用户时将其清除。如果此新点击发生在所有动画完成之前,那么它将停止它们,但是如果在动画完成之后出现,则它什么也不做,这就是您想要的
例如
let pendingAnimations = [];
allDivElements.forEach((div) => {
div.addEventListener("click",function () {
pendingAnimations.forEach(id => clearTimeout(id));
pendingAnimations = [];
const id1 = setTimeout(() => {
changeBg(this,true);
const id2 = setTimeout(() => {
changeBg(this,false);
timeout = 300;
},timeout);
pendingAnimations.push(id2);
},timeout);
pendingAnimations.push(id1);
timeout += 300;
});
});
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。