正如其他人暗示的那樣,這裏的問題在於,您一次只畫出一個象限。一旦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