javascript-如何使用requestAnimationFrame为循环中的多个方块设置动画
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript-如何使用requestAnimationFrame为循环中的多个方块设置动画,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2129字,纯文字阅读大概需要4分钟。
内容图文
![javascript-如何使用requestAnimationFrame为循环中的多个方块设置动画](/upload/InfoBanner/zyjiaocheng/690/54907ee6085e4b4883c3065159e8da8f.jpg)
我正在使用HTML画布绘制多个正方形.我有2个函数:1)绘制一个正方形,2)在一个循环内绘制多个正方形.
现在,我想使用requestAnimationFrame动画这些正方形,一次绘制一个正方形.我该如何实现.这是一个jsFiddle
var canvas = document.getElementById('canvas'),
ctx = canvas.getContext('2d');
function rect(x, y, w, h) {
ctx.beginPath();
ctx.rect(x, y, w, h);
ctx.stroke();
}
function drawRect(number, size) {
for (var i = 0; i <= number; i++) {
rect(i * size, i * size, (i * size) * 2, (i * size) * 2);
}
}
drawRect(10, 5);
解决方法:
你可以做类似的事情
var numRects = 10;
var size = 5;
var i = 1; // which rectangle we're drawing
var delay = 1000/60; // num miliseconds between frames
var before = new Date().getTime(), // last draw time in ms
now; // current time in ms
function animateRect() {
// get the current time to find if we should draw
now = new Date().getTime();
// if sufficient time passed since last draw, draw a rect
if ( now - before > delay && i <= numRects) {
rect(i * size, i * size, (i * size) * 2, (i * size) * 2);
i++;
before = now;
}
requestAnimFrame(animateRect);
}
编辑:
正如Blindman67在下面指出的那样,requestAnimFrame将自动画开始以来的当前时间戳传递给回调.利用它的方法如下:
var numRects = 10;
var size = 5;
var i = 1; // which rectangle we're drawing
var delay = 1000/60; // num miliseconds between frames
var before; // last draw time in ms
function animateRect(now) {
if ( !before ) before = now;
// if sufficient time passed since last draw, draw a rect
if ( now - before > delay && i <= numRects) {
rect(i * size, i * size, (i * size) * 2, (i * size) * 2);
i++;
before = now;
}
requestAnimFrame(animateRect);
}
但是,这需要修改OP使用的填充程序,以便将当前时间戳传递给setTimeout中的回调:
window.requestAnimFrame = (function() {
return window.requestAnimationFrame ||
window.webkitRequestAnimationFrame ||
window.mozRequestAnimationFrame ||
window.oRequestAnimationFrame ||
window.msRequestAnimationFrame ||
function( /* function */ callback, /* DOMElement */ element) {
window.setTimeout(callback, 1000 / 60, new Date.now());
};
})();
内容总结
以上是互联网集市为您收集整理的javascript-如何使用requestAnimationFrame为循环中的多个方块设置动画全部内容,希望文章能够帮你解决javascript-如何使用requestAnimationFrame为循环中的多个方块设置动画所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。