Ich versuche, Code für das oben beschriebene Problem zu schreiben. Ich habe versucht, eine Lösung zu finden. Das habe ich derzeit.Zeichnen Sie fortlaufende Zeilen auf HTML-Canvas nacheinander
var canvas = document.getElementById('canvas');
var context = canvas.getContext('2d');
var drawColorLine = function(start, end, color) {
var deltaX, deltaY, i = 0,
currLength = 0,
isHor, isVert;
deltaX = end[0] - start[0];
deltaY = end[1] - start[1];
context.strokeStyle = color;
isHor = deltaX === 0 ? 0 : 1;
isVert = deltaY === 0 ? 0 : 1;
function draw() {
context.beginPath();
context.moveTo(start[0] + currLength * isHor, start[1] + currLength * isVert);
currLength = currLength + 0.5 * i;
context.lineTo(start[0] + currLength * isHor, start[1] + currLength * isVert);
context.stroke();
if (currLength <= Math.max(deltaX, deltaY)) {
i = i + 1;
requestAnimationFrame(draw);
}
}
draw();
};
drawColorLine([40, 40], [100, 40], '#116699');
drawColorLine([40, 40], [40, 100], '#bb11dd');
<canvas id='canvas' width='400' height='400'></canvas>
Das Problem ist, sind beide zur gleichen Zeit gezogen werden. Einer sollte dem anderen folgen. Mit Promis ist es möglich, die zweite Funktion zu verzögern, während die erste Funktion ausgeführt wird und später die zweite Funktion ausführt? Ich habe versucht, etwas auf Promises zu lesen, aber ich konnte nicht übersetzen, was ich verstanden habe.
Vielen Dank im Voraus.
Ich schrieb ursprünglich eine Lösung mit Callback. Ich musste viele Zeilen zeichnen. Ich möchte es sequentiell machen. Callback schien nicht der richtige Weg zu sein, oder ich fand keine gute Möglichkeit, meine Funktion zu erweitern. Ich habe versucht, Versprechungen von verschiedenen Orten zu lesen, aber ich habe immer noch keine gute Idee, wie man sie effektiv benutzt. Was ist der Weg zu lernen, das Zeug noch einmal zu lesen? –
Sie können viele Sachen unter https://github.com/kriskowal/q/wiki/General-Promise-Resources finden – Bergi
Callbacks würde genauso gut funktionieren, Sie müssten nur die Regeln ein wenig umwandeln: "Jeder Async Funktion muss einen Rückruf nehmen, und es aufrufen, wenn es fertig ist "," alles nach einer asynchronen Sache muss in seinen Callback gehen und dann am Ende zurückrufen ". Es gibt Fortsetzungen, wann immer Sie ein Versprechen "zurückgeben" würden. – Bergi