你可以绘制顶部半圆,a矩形和底部半圆。你可以计算出多少应该在一个特定的时刻与下移:
(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();
问题是什么? – Howard 2011-12-26 17:47:05
@Howard在这里你好友,更新了问题 – 2011-12-26 17:50:01
你是什么意思的“这个循环方法”,你为什么认为这是“内存占用”?你能向我们展示迄今为止的代码吗? – Howard 2011-12-26 17:51:56