Проблема, как намекают другие, заключается в том, что вы рисуете линии в квадранте за раз.Как только вызывается метод 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 );
}
В последнем блоке гарантируется, что квадранты не пересекаются друг с другом.