在JavaScript中创建动画的典型方式,就是使用setInterval()方法来控制所有的动画,以下是一个使用setInterval()的基本动画循环。
(function(){
function aa() {
doSome();
doOther();
}
setInterval(aa, 100);
})();
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<style>
#box{
width: 100px;
height: 100px;
background: red;
position: relative;
top:0px;
left: 0px;
}
</style>
<div id="box"></div>
<button id="btn">运动</button>
<script>
var oBox = document.getElementById("box");
var oBtn = document.getElementById("btn");
var left = 5;
oBtn.onclick = function() {
setInterval(requestAnimation, 100);
}
function requestAnimation() {
left += 5;
oBox.style.left = left + "px";
}
</script>
</body>
</html>
为了创建一个小型动画库,aa()方法就得不断循环地执行每一个动画,并相应的改变不同元素的状态,如果没有动画需要更新,这个方法可以退出,什么也不用做,甚至可把动画停下来,等待下一次需要更新的动画。
编写这种动画的关键在于要知道延迟多少时间合适,一方面,循环间隔必须足够短,这样才能让不同的动画显得平滑流畅,另一方面:循环间隔还要足够长,这样才能确保浏览器有能力渲染产生的变化,大多数电脑显示器刷新频率是60hz。大概相当于每秒钟重回60次,
因此,最平滑的动画最佳时间就是1000ms/60,约等于17ms,以这个循环间隔重回动画效率很好。
使用setInterval()和setTimeout()都不是最准确的,所以就出现了新兴的动画API,requestAnimationFrame();
好了,今天就写到这里吧,明天继续研究requestAnimationFrame()函数。