2016-07-23 6 views
-2

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>
Leider im ein Anfänger und ich weiß, es muss Dinge i betrachtet haben. Könnte mir bitte jemand sagen, was ich falsch mache?

+0

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

+0

@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

+0

Froh, dass ich helfen konnte, dieses Problem zu beheben! – Davis

Antwort

1

Dies könnte nicht genau das, was Sie suchen, aber hoffentlich ist es etwas Nützliches hier:

https://jsfiddle.net/tobyl/g01zd64o/17/

jQuery:

var move = function() { 
    var element = document.getElementById('mover'); 
    var pos = element.offsetLeft; 

    if (pos != 0) { 
     setTimeout(function() { 
     element.style.left = pos + 150 + 'px'; 
    }, 1000); 
    } 
} 

Hinweis: es mir nicht klar war, warum Einige Ihrer Javascript sind da, ich könnte etwas verpassen. Ich habe versucht, eine minimale Darstellung zu erstellen.

+0

Danke für die Eingabe! Entschuldigung mein Javascript ist unklar. Ich bin ein totaler Noob, der darum kämpft, alles zu verstehen. Aber was ich versuche zu tun ist ... mit einem einzigen Klick auf den Knopf, ID wie das erste Bild, um aus dem Sichtfeld nach rechts zu gleiten .... dann pausiere das zweite Bild ..... dann hab das zweites Bild rutscht nach rechts .... und stoppt beim dritten Bild. Was ich wirklich versuche zu replizieren, ist eine Version der gleitenden Bilder, die man bei [primewire] (http://www.primewire.ag/?tv) ... ganz oben auf dem Bildschirm sehen kann. Ich habe schon einmal den css-Übergang gesehen, wollte aber versuchen und lernen, etwas selbst zu animieren. – xxkaiwaxx

+0

Nun, ich habe alles mit meiner Methode versucht und es hat am Ende nicht geklappt. Also nahm ich eine Variation Ihrer Methode an, um das Ergebnis zu erhalten, das ich brauchte. Danke, dass Sie mich in eine bessere Richtung weisen :) – xxkaiwaxx

+0

Das ist großartig. Wenn Sie meine Antwort nützlich fanden, würde ich es begrüßen, wenn Sie die Antwort als akzeptiert markieren könnten. – Toby

Verwandte Themen