正如其他人暗示的那样,这里的问题在于,您一次只画出一个象限。一旦SetTimeout
方法被调用并且第一个vLoop
返回,代码将继续运行到下一个将更改所有全局变量等的drawVertical
。
你需要做的是同步你如何调用vLoop以及你如何改变全局变量。
这是基本的解决方案:
替换...
drawVertical(c,-1*step,-1*stepInt,-1*bigStep,xStart,xEnd,y/2+50,y);
drawVertical(c,step,stepInt,bigStep,xStart,xEnd,y/2+50,y);
drawVertical(c,-1*step,-1*stepInt,-1*bigStep,xStart,xEnd,y/2-50,0);
drawVertical(c,step,stepInt,bigStep,xStart,xEnd,y/2-50,0);
...与...
var q = new Array();
q[0] = [c,-1*step,-1*stepInt,-1*bigStep,xStart,xEnd,y/2+50,y];
q[1] = [c,step,stepInt,bigStep,xStart,xEnd,y/2+50,y];
q[2] = [c,-1*step,-1*stepInt,-1*bigStep,xStart,xEnd,y/2-50,0];
q[3] = [c,step,stepInt,bigStep,xStart,xEnd,y/2-50,0];
drawQuadrant(q, 0);
将您的drawVertical
功能替换为...
function drawQuadrant(q, i)
{
var r = q[i];
c__ = r[0];
step__ = r[1];
stepInt__ = r[2];
bigStep__ = r[3];
xStart__ = r[4];
xEnd__ = r[5];
yStart__ = r[6];
yEnd__ = r[7];
vLoop(q,i);
}
变化vLoop
函数原型看起来像这样...
function vLoop(q,i)
,最后用替换您的递归调用vLoop
(从内VLOOP)。 ..
if ((xStart__ > 0) && (xStart__ < window.innerWidth))
{
setTimeout(function(){vLoop(q,i)}, 1);
}
else if (++i < 4)
{
setTimeout(function(){drawQuadrant(q,i)}, 1);
}
最后一块是确保象限没有跨越彼此的地方。
你能告诉我们'vLoop'的实际代码吗 – Raynos 2011-04-24 13:31:05