Ich habe ein div mit 3 Bildern nebeneinander. Zunächst wird 1 Bild angezeigt, während die anderen 2 mit Überlauf ausgeblendet werden: versteckt auf einem Eltern-Div. Dann benutze ich die setInterval-Methode, um das div mit den Bildern 1px jede Millisekunde nach links zu verschieben, bis das div sich 150px nach links bewegt hat. Zu diesem Zeitpunkt ist das erste Bild aufgrund eines Überlaufs nicht mehr sichtbar: ausgeblendet und das zweite Bild ist jetzt sichtbar. An dieser Stelle pausiert es wie vorgesehen mit der Methode setTimeout für eine Sekunde. Aber dann beginnen die Dinge falsch zu laufen. Nach Ablauf der 1 Sek. Wird das dritte Bild entweder schneller und stoppt dort, wo es sollte .... oder es beschleunigt sich und geht über den Haltepunkt hinaus und außer Sichtweite. Je mehr du auf den Knopf klickst, desto mehr verschwinden die Bilder! Ich denke nicht, dass ich setTimeout richtig verwende. Wenn ich es im Debugger anschaue ... läuft die Funktion, die setTimeout aufruft (pause()) in zufälligen Intervallen immer wieder durch, bevor sie den Rest des Skripts durchläuft. Dann kommt wieder zufällig eine Schleife zurück. Es sollte nur einmal ausgeführt werden ... 1 Sekunde nachdem setTimeout es aufruft, dann nie wieder.Wie verwende ich die setTimeout-Methode, um das Karussell nach einer bestimmten Zeit zu verschieben? Javascript
function move() {
var element = document.getElementById('mover');
var pos = -300;
var go = setInterval(animate, 1);
function animate() {
if (pos === 0) {
clearInterval(go);
} else if (pos === -150) {
function pause() {
pos++;
}
setTimeout(pause, 1000);
} else {
pos++;
element.style.left = pos + 'px';
}
}
}
* {
box-sizing: border-box;
}
img {
width: 150px;
height: 225px;
}
#overflow {
overflow: hidden;
width: 150px;
height: 225px;
}
#mover {
position: relative;
left: -300px;
width: 450px;
font-size: 0;
}
<div id="overflow">
<div id="mover">
<img src="http://images.primewire.ag/thumbs/2763151_Mr_Robot_2015_30.jpg">
<img src="http://images.primewire.ag/thumbs/2777450_Outcast_2016.jpg">
<img src="http://images.primewire.ag/thumbs/2770130_Ash_vs_Evil_Dead_1969.jpg">
</div>
</div>
<br>
<button onclick="move()">Click me</button>
Da Sie setTimeout verwenden, das asynchron ist, ist es möglich (ich bin mir nicht sicher) für pos nie gleich 0 oder 150 genau in dem Moment, dass der Scheck aufgerufen wird. Wie wäre es mit dem Ersetzen der Gleichgestellten mit größer als oder gleich versuchen und diese Situation zu vermeiden? Das könnte den Teil stoppen, wo es zufällig über die Position hinausgeht, die es eigentlich haben soll. – Davis
@Davis Danke für den Tipp! Mit größer als oder gleich aussortiert den Fehler am Ende der Folie. Jetzt habe ich eine bessere Vorstellung davon, was los ist. Ich denke jetzt darüber nach, dass ich deine Informationen habe, mit denen ich arbeiten kann. Wirklich zu schätzen :) – xxkaiwaxx
Froh, dass ich helfen konnte, dieses Problem zu beheben! – Davis