Я могу нарисовать линию точка за точкой, но если сначала я нарисую линию полностью, то попробую точки, все точки появятся одновременно.
Итак, посмотрите код, в функции window_onload, если я вместо вызова startRedDots вместо pathRll вы поймете, что я имею в виду. Он проведет черту, затем сразу появятся все красные точки и не будут знать, почему.
<script type="text/javascript">
var pauseAmount = 300;
var m1, c1;
var pathInt;
var points1 = [new Vector(10, 10),new Vector(500, 500)];
function Vector(x, y)
{
this.X = x;
this.Y = y;
}
var counter;
var startX;
var startY;
var endX;
var endY;
var amount;
function resetVars() {
counter=0;
startX = points1[counter].X;
startY = points1[counter].Y;
endX = points1[counter+1].X;
endY = points1[counter+1].Y;
amount = 0;
c1.strokeStyle = "lightgrey";
c1.lineWidth = 15;
c1.lineCap = "round";
c1.setLineDash([1, 30]);
}
window.onload = function()
{
m1 = document.querySelector("#b");
c1 = m1.getContext("2d");
resetVars();
//pathInt = setTimeout(function(){ pathAll(); }, 1);
pathInt = setInterval(function(){ startRedDots(); }, pauseAmount);
};
function pathAll() {
c1.moveTo(startX, startY);
c1.lineTo(endX, endY);
c1.stroke();
resetVars();
setTimeout(function(){ startRedDots(); }, 2500);
}
function startRedDots() {
c1.strokeStyle = "red";;
pathInt = setInterval(function(){ oneAtATime(); }, pauseAmount);
}
function oneAtATime() {
c1.moveTo(startX, startY);
c1.lineTo(startX + (endX - startX) * amount, startY + (endY - startY) * amount);
//alert(startX + (endX - startX) * amount);
if (points1[counter+1].X < points1[counter].X) {
if(points1[counter+1].X < Math.round(eval(startX + (endX - startX) * amount))) {
c1.stroke();
}
else {
clearInterval(pathInt);
}
}
else if (points1[counter+1].X > points1[counter].X) {
if(points1[counter+1].X > Math.round(eval(startX + (endX - startX) * amount))) {
//alert(startX + (endX - startX) * amount);
c1.stroke();
}
else {
clearInterval(pathInt);
}
}
else if (points1[counter+1].X == points1[counter].X) {
if(points1[counter+1].X == Math.round(eval(startX + (endX - startX) * amount))) {
c1.stroke();
}
else {
clearInterval(pathInt);
}
}
amount += 0.01;
}
</script>
<canvas id="b" width="600" height="600" style="position:absolute;top:50px;left:50px;"></canvas>