setTimeout(function() { oSHDian.style.animation = "appear 3s 1 linear"; oSHDian.style.animationFillMode = "forwards"; }, 2000);为什么动画没有保留动画结束的状态
时间: 2024-04-05 14:32:22 浏览: 109
根据你提供的代码,我可以看出你使用了animation-fill-mode属性,并将其设置为forwards。这意味着动画结束后元素将保持在动画结束的状态,即保留动画结束的状态。
如果你的动画没有保留动画结束的状态,可能有以下原因:
1. 你的动画没有正确地结束。请确保你的动画正常结束,并且没有被其他样式或JavaScript代码覆盖。
2. 你的元素可能被重置了。如果你在动画完成后改变了元素的样式或属性,则可能会重置元素,并且动画结束后元素将回到其原始状态。
3. 你的animation-fill-mode属性设置不正确。请确保你的animation-fill-mode属性设置为forwards,以确保元素保留动画结束的状态。
希望这些提示能帮助你找到问题所在。
相关问题
function SHD(){ setTimeout(function() { oSHDian.style.animation = "appear 3s 1 linear"; }, 2000) oSHDian.style.opacity = "1" } SHD()为什么每次都会显示opacity='1'
这是因为在`SHD()`函数中,`oSHDian.style.opacity`被设置为1,而`setTimeout`函数中设置的`oSHDian.style.animation`是在2秒后才被执行的。所以在2秒后,`oSHDian.style.opacity`已经被设置为1了,因此无论`setTimeout`中的动画是否被执行,`oSHDian`元素的`opacity`都是1。如果想要在动画执行完毕后再设置`oSHDian.style.opacity`为1,可以在`setTimeout`函数的回调函数中添加一个延迟,确保动画已经执行完毕。例如:
```
function SHD() {
setTimeout(function() {
oSHDian.style.animation = "appear 3s 1 linear";
setTimeout(function() {
oSHDian.style.opacity = "1";
}, 3000);
}, 2000);
}
```
这样,在延迟3秒后,`oSHDian`元素的`opacity`才会被设置为1。
// 定义一个函数,以便于获取DOM对象 function $$(id) { return document.getElementById(id) } // alert("页面已经加载完成!"); // 按钮控制太阳光线动画 window.onload = function() { let oSunline = document.getElementsByClassName("sun-line"); let oBtn = $$("btn"); let reoBtn = $$("re-btn"); let oSunlight = $$("sun-light"); let oSunHouse = $$("sun-house") let oSHDian = $$("s-h-dian") oBtn.onclick = function() { oSunlight.style.display = "flex"; //阳光动画开始 oSunlight.style.animation = "shot 1s"; oSunlight.style.animationFillMode = "forwards"; //阳光动画结束 // s-h-电力传输开始 setTimeout(function() { oSHDian.style.animation = "move 1s infinite linear"; }, 1000) if (oSHDian.style.opacity="0"){ oSHDian.style.opacity="1"; } } reoBtn.onclick = function() { oSunlight.style.animation = 'none'; // 先将animation设为none oSunlight.offsetHeight; // 触发重绘 oSunlight.style.animation = null; // 再将animation设为null oSHDian.style.animation = 'none'; // s-h-电力传输结束 oSHDian.offsetHeight; oSHDian.style.animation = null; if (oSHDian.style.opacity="1"){ oSHDian.style.opacity="0"; } }帮我检查一下
这段代码看起来没有什么明显的语法错误,但是有一些需要注意的地方:
1. 在判断 `oSHDian.style.opacity` 的值时,应该使用 `==` 或 `===`,而不是 `=`。因为 `=` 是赋值操作符,会将 `oSHDian.style.opacity` 的值设为 `1`,这可能会导致预期之外的结果。
2. 在重置动画的时候,应该先将 `animation` 设为 `none`,然后触发一次重绘,再将 `animation` 设为 `null`。这是为了确保浏览器能够正确地重置动画效果。
总体来说,这段代码可以正常运行,但是可以进一步优化。比如可以将重置动画的代码封装成一个函数,以便于重用;也可以使用 `classList` 属性来操作元素的类名,以提高代码的可读性和可维护性。
阅读全文