我已经弹出了爆米花,是的,你可以做到这一点。通过创建一个Image
对象并设置其src
属性来加载爆米花图像。使用图像的onload
属性来启动动画。假设动画的持续时间为k,请使用正弦曲线sin(x/(k/π))
来计算每帧显示的内核数量。
下面是做这件事的一种方式,演示在这里:http://jsfiddle.net/uyk63/8/
var IMAGE_URL = 'http://i.istockimg.com/file_thumbview_approve/959519/2/stock-photo-959519-isolated-single-popcorn.jpg';
var DURATION = 10 * 1000, FRAMES = 30, KERNELS = 10;
var canvas = document.getElementById('canvas');
var ctx = canvas.getContext('2d');
var frame = 0,
start = new Date().getTime(),
image = new Image;
image.src = IMAGE_URL;
image.onload = function() {
function pop() {
ctx.drawImage(image,
Math.floor(Math.random() * canvas.width),
Math.floor(Math.random() * canvas.height),
100, 50);
}
// A little overcomplicated. You could probably do this in a single loop.
// (It's late and I'm tired, though. Sorry.)
function animate() {
var i, delay,
count = Math.floor(Math.sin(frame/(FRAMES/Math.PI)) * KERNELS);
for (i = 0; i < count; i++) {
delay = (DURATION/FRAMES)/count * i;
setTimeout(pop, delay);
}
if (++frame < FRAMES) {
setTimeout(animate, DURATION/FRAMES);
}
}
animate();
};