画布 - 使画布中的圆圈在特定时间向下移动

时间:2011-12-26 17:41:26

标签: javascript html5 animation canvas html5-canvas

我想创建一个圆ctx.arc(10, 10, 15, 0, Math.PI*2, true);,然后让它向下流动而不会丢失它的痕迹。 您可以在下图中清楚地看到这一点 -

enter image description here

在这里,我们可以看到黑暗的一面......圆圈实际上随着时间的推移而移动..我想通过输入时间来控制速度......就像从上到下它应该在2秒内到达(或其他一些方法来控制其流速)

编辑:对不起,对于一些好友问题是:最高效和“非内存占用”方法是做什么的,(我知道有这种循环方法,但它的内存占用方法)

2 个答案:

答案 0 :(得分:1)

您可以绘制顶部半圆,矩形和底部半圆。您可以计算在特定时刻应该向下移动多少:

(Date.now() - startTime) / t * (y2 - y1)

其中t是完整移动所需的时间。

http://jsfiddle.net/eGjak/231/

var ctx = $('#cv').get(0).getContext('2d');

var y1 = 100,  // start y
    y2 = 300,  // end y
    x  = 200,  // x
    r  = 50,   // radius
    t  = 2000; // time

var dy = y2 - y1, // difference in y
    pi = Math.PI,
    startTime = Date.now();

var f = function() {
    var y = y1 + (Date.now() - startTime) / t * dy;

    ctx.beginPath();
    ctx.arc(x, y1, r, pi, 0); // top semicircle
    ctx.rect(x - r, y1, r * 2, y - y1); // rectangle
    ctx.arc(x, y, r, 0, -pi); // bottom semicircle
    ctx.fill();

    if(y < y2) { // if should be moved further
        webkitRequestAnimationFrame(f);
    }
};

f();

答案 1 :(得分:1)

Javascript知道setTimeout(fn, ms),它会在给定的毫秒数后调用给定的函数。但是,浏览器需要一些时间来渲染您的绘图,当您希望2秒钟时,您将需要观察帧/秒速率。

还有一个名为requestAnimationFrame的新specification draft,请参阅http://paulirish.com/2011/requestanimationframe-for-smart-animating/