玩游戏学前端-贪吃蛇-animationframe
window.requestAnimationFrame() 方法
现如今,各种web开发技术被引入来创建漂亮的web页面。当谈到漂亮的网页时,最重要的内容之一就是动画。有很多方法可以生成动画,CSS3是其中之一,但JavaScript一直是一个强大的选项。window.requestAnimationFrame()方法是JavaScript中将简单的动画整合到我们的项目中的方法之一。也可以使用早期的方法,如setTimeout()或setInterval(),这两个方法仍然可用,但是使用起来慢且不太优雅,最主要的问题还是同步,过渡时间慢,而且对游戏项目来说体验较差。
语法
window.requestAnimationFrame( callback 回调函数 );
参数:此方法接收单个参数 callback, 它是一个回调函数; 除非你想要动画停止,否则你应该编写回调函数,便于发出对下一帧的请求。回调函数接受时间戳或一个时间值,在该时间值处开始执行。
返回值:此方法返回一个非零长整型数值,作为回调函数中动画的唯一标识。
示例1: 元素向右移动
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| <div id="panel"> <h1 style="color: #d662f3;">我爱你中国</h1> </div>
<script type="text/javascript"> var start = null; var element = document.getElementById('panel'); function startAnimation(timestamp) { if (!start) { start = timestamp; } var progress = timestamp - start;
element.style.transform = 'translateX(' + Math.min(progress / 10, 700) + 'px)'; window.requestAnimationFrame(startAnimation); }
window.requestAnimationFrame(startAnimation); </script>
|
回调函数会收到一个参数,这个参数表示当前时间距离开始触发 requestAnimationFrame 的回调的时间。
示例2: 按下按钮元素向右移动
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
| <!DOCTYPE html> <html>
<head> <style> div { position: absolute; left: 10px; top: 50px; padding: auto; color: white } h1 { color: green; } </style> </head>
<body> <center> <button onclick="start()">开始动画</button> </center> <div id="panel"><h1>我爱你中国</h1></div>
<script type="text/javascript"> var x = document.getElementById("panel");
var requestId; var stopped; var starttime;
function startAnimation(time) {
if (!stopped) { x.style.left = ((Date.now() - starttime) / 10 % 700) + "px"; requestId = window.requestAnimationFrame(startAnimation); } }
function start() {
starttime = Date.now();
requestId = window.requestAnimationFrame(startAnimation); stopped = false; } </script> </body>
</html>
|