javascript - 如何重置 CSS 动画,使其每次仅使用 Javascript 运行
问题描述
我已经从这个线程实现了解决方案,它仍然只运行一次。
代码:
const ButtonClickFunction = (e,id)=>{
e.preventDefault()
var el = document.querySelector(`.location-${id}`)
el.style.animation = '';
el.style.animation = "addition 1s";
}
据我所知,每次单击按钮时,元素动画都会被清除,然后设置为我想要的动画。但是,它仍然只运行一次,然后就再也不会工作了。我真的希望只使用 javascript 来做到这一点,因为添加一个类然后将其删除似乎很笨重,而不是最佳实践。如果这很重要,我正在使用 React 作为 FE 框架
编辑:解决方案
var el = document.querySelector(`.location-${id}`)
el.style.animation = "addition 1s 3";
el.addEventListener('animationend', ()=>{
el.style.animation = ""
})
正如一位用户所说,浏览器将忽略背靠背的分配,只是优化以运行最终的分配调用。要解决此问题,请在动画结束后使用事件监听器触发“重置”。
我仍然认为添加类、删除类和使用 setTimeout 来“重置”动画既笨拙又笨拙。这个解决方案只是几行代码,并且不会影响可维护性,必须滚动无休止如果您希望用户触发许多动画,则需要大量的类。
https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/animationend_event
解决方案
推荐阅读
- c# - 我如何知道我的列表中的项目是否已更改?
- r - 如何查看由 for 循环生成的特定训练集和测试集?
- sql - BigQuery:使用 DML 原子地替换日期分区
- git - 如何仅合并来自另一个分支的一些文件
- android - react-native-udp Sochets.createSocket 未定义对象
- excel - 整个工作簿的 SUMIF
- java - Javadoc @link 到 Kotlin 类
- r - R闪亮的checkboxGroup在地图上绘制数据
- laravel - Laravel 5.4 Route [login] 未定义
- scala - 什么可以在尾递归功能中炸毁我的笔记本电脑?