gpt4 book ai didi

javascript - 流畅的javascript动画

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:47:27 26 4
gpt4 key购买 nike

这是一些代码:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Untitled Document</title>
<style>
body { margin:0; padding:0; }
#a {
position:absolute;
background:#0FF;
left:0;
height:300px;
width:120px;
}
input, #a {
margin:10px;
}
</style>
<script>
function foo() {
box = document.getElementById('a');
var computedStyle = box.currentStyle || window.getComputedStyle(box, null);
box.style.left = parseInt(computedStyle.left) + 10 + 'px';
setTimeout("foo()",20);
}
</script>
</head>

<body>
<input type="button" value="RUN, FORREST, RUN!" onClick="setTimeout('foo()',20)">
<div id="a"></div>
</body>
</html>

如您所见,它在页面上为 DIV 设置了动画,但动画并不清晰流畅 — DIV 的边框实际上发生了变形。有人知道我怎样才能让它正常工作吗?

最佳答案

Ditto JustLoren:它在我的机器上运行良好。我不确定边界“变形”是什么意思......也许你在谈论tearing ?如果是这样,恐怕您对此无能为力。

撕裂的传统解决方案是等待 vsync 绘制下一帧,但这种能力在 JavaScript 中不可用。没有框架可以修复它。 (框架爱好者:请停止对您不理解的 JavaScript 问题建议“使用 my_favourite_framework!它解决所有问题!”。)

正如 mck89 所建议的,您当然可以通过绘制更多帧使动画更流畅(这也可以减少撕裂的影响),但代价是占用更多 CPU 资源来执行。您可能还更愿意保留一个变量来存储您的 x 值,而不是每次都从 currentStyle 中解析它。它会更简单,并得到更广泛的浏览器支持。

ETA 回复评论:JS 中没有具体的最小超时时间(有时我可以将其降低到 1 毫秒),但是您可以从动画中获得多少 fps 在很大程度上取决于浏览器和机器的能力,这就是为什么通常将位置/帧基于动画开始后耗时量(使用新的 Date().getTime())而不是每帧移动/更改固定量是个好主意。

在任何情况下,您实际上可以达到的最快速度是使用 16 毫秒的间隔,这对应于 60Hz 显示器上的一帧(通常的平板默认设置)。

关于javascript - 流畅的javascript动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1322228/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com