【发布时间】:2023-01-12 17:07:24
【问题描述】:
requestAnimationFrame 是创建基于 javascript 的动画的好解决方案。但我无法为此功能设置持续时间。我想播放动画一段时间。我尝试了一些 fps 解决方案,但这些解决方案并不顺利。
const water = document.querySelector('.water')
let scale = 0
const fillGlass = () => {
scale += 0.01
water.style.transform = `scaleY(${scale})`
if (scale <= 1) {
requestAnimationFrame(fillGlass)
}
}
requestAnimationFrame(fillGlass)
.glass {
margin: 100px;
width: 150px;
height: 250px;
border: 3px solid #000;
border-top: 0;
border-bottom-width: 12px
}
.water {
height: 100%;
background-color: #BBDEFB;
transform: scaleY(0);
transform-origin: bottom center;
}
<div class="glass">
<div class="water"></div>
</div>
【问题讨论】:
-
像这样简单的动画你可以写在
css的keyframe。这样你就会有更多的控制权。 -
请记住,不同的显示器具有不同的帧速率,因此
requestAnimationFrame将根据显示器运行快或慢。例如,假设您设置 2 秒来完成动画。 120fps 显示器可能会在 1 秒内完成动画,而 60fps 显示器可能会在 3 秒内完成动画。 -
@Layhout 所以我不能使用它。你能建议任何其他解决方案吗?
-
我可以知道为什么必须用 js 完成吗?
-
@Layhout 因为我会玩,开始/停止,即时填充和即时空动作。是的,我知道我可以使用 animaton-play-state css 属性开始/停止动画,但我不能为填充和空动作设置动画。你可以在这里查看:jsfiddle.net/dhuj7x0w
标签: javascript html css requestanimationframe