- requestAnimationFrame(callback) 回调函数会在绘制之前执行
- requestAnimationFrame(callback) 会在浏览器每次重绘前执行callback调用,每次callback执行的时机都是浏览器刷新下一帧渲染周期的起点上
- requestAnimationFrame(callback) 的回调 callback 回调参数 timestamp 是回调 被调用的时间,也就是当前帧的起始时间
- requestAnimation FrameTime preformance.timing.navigationStart + performance.now() 约等于Date.now()
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>RequestAnimationFrame</title>
</head>
<body>
<div style="background-color:blue; width: 0; height: 20px;"></div>
<button>开始</button>
<script>
let div = document.querySelector('div');
let button = document.querySelector('button');
let startTime;
function progress () {
div.style.width = div.offsetWidth+1+'px';
div.innerHTML = div.offsetWidth+'%';
if(div.offsetWidth<100){
console.log(Date.now()-startTime+"ms")
startTime = Date.now();
requestAnimationFrame(progress)
}
}
button.onclick = function(){
div.style.width = 0;
startTime = Date.now();
// 浏览器会在每一帧渲染前执行progress
requestAnimationFrame(progress);
}
</script>
</body>
</html>