根据大多数文章的说法,requestAnimationFrame 在浏览器重新绘制之前运行,并适合屏幕刷新率。然而我的理解是,浏览器仅在某些代码更改屏幕上的内容时才会重新绘制,并且如果没有发生任何情况,则不应调用 requestAnimationFrame 。我尝试了这段代码,它表明无论视图是否更改,requestAnimationFrame都会被调用。我哪部分理解错了?
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
</head>
<body>
<div id="some">aaa</div>
</body>
<script>
function step(timeStamp) {
console.log("aaa"); // gets printed every frame
window.requestAnimationFrame(step);
}
window.requestAnimationFrame(step);
</script>
</html>
您唯一错误的是,浏览器仅在发生变化时重新绘制。您阅读的文章所解释的是正确的:
requestAnimationFrame
与用户显示器的刷新率匹配,这意味着它通常每秒运行 60 次。
查看MDN 的文章了解完整详细信息。