2010-08-16 5 views
7

Ich versuche, meinen eigenen Bildschieberegler mit einem Intervall von 4000 Millisekunden zur automatischen Wiedergabe zu bringen. Ich habe versucht, setTimeout zu verwenden, aber ich kann nicht scheinen, es zur Arbeit zu bringen. Ich würde es begrüßen, wenn mir jemand helfen könnte. Hier ist Beispiel des Schiebers:Bildregler für automatische Wiedergabe abrufen

http://www.matthewruddy.com/slider-intervalissue/

Irgendwelche Ideen, wie ich es die automatische Wiedergabe bekommen?

Hier ist der jQuery-Code:

$(document).ready(function(){ 
    var images = $('.slider li'); 
    var slides = images.length; 
    var sliderwidth = 500; 
    var currentimage = 0; 
    var containerwidth = sliderwidth*slides; 
    var autoplay = 4000; 

    $('.slider').css('width', containerwidth); 

    $('#next').bind('click',nextimage); 

    function nextimage(){ 
     if(currentimage<slides-1){ 
      currentimage++; 
      $('.slider').animate({left:-sliderwidth*(currentimage)},{duration:800,easing:'easeInOutCubic'}); 
     } 
     else{ 
      currentimage = 0; 
      $('.slider').animate({left:0},{duration:800,easing:'easeInOutCubic'}) 
     } 
    }; 

}); 

Danke, Matthew

Antwort

2

ich in der Lage war, eine automatische Wiedergabe einrichten, die ganz gut läuft, eine Kombination von setTimeout und Rekursion.

Ich gab der nextimage() Funktion einen Parameter autoplay, der ein Boolean ist. Dann habe ich das am Ende der Funktion folgende Zeile:

if (autoplay) { setTimeout(function() { nextimage(true); }, 4000); } 

Schließlich habe ich diese Zeile am Ende des Skripts, die Autoplay-Schleife in Gang zu bringen:

setTimeout(function() { nextimage(true); }, 4000); 

Schauen Sie sich die Demo Hier, meist aus dem, was Sie zur Verfügung gestellt, mit ein paar Modifikationen, um das Autoplaying: http://jsfiddle.net/bVjkP/

Kurz gesagt, übergeben Sie einen Boolean in die nextimage() -Funktion, um es zu sagen, ob eine Autoplay zu beginnen oder nicht. Dann rufen Sie einfach ein initiales setTimeout auf, um den Ball ins Rollen zu bringen. Der Trick bei dieser Methode besteht darin, dass Sie eine anonyme Funktion über setTimeout aufrufen müssen, die die nextimage-Funktion mit autoplay auf true aufruft, weil Sie keine Parameter übergeben können, wenn Sie eine Funktion mit setTimeout aufrufen. Dies ähnelt der Methode zum Binden von Funktionen an Ereignisse wie Klicken oder Hovern mit jQuery.

+0

Vielen Dank! Deine Methode funktioniert perfekt, aber ich verstehe sie immer noch nicht (Ich mag es Dinge zu verstehen, egal ob sie funktionieren oder nicht). Warum müssen Sie die Zeile zweimal schreiben? Warum nicht die erste Zeile; > if (Autoplay) {setTimeout (function() {nextimage (true);}, 4000); } Holen Sie das Autoplaying los? –

+0

Diese Zeile wird die Funktion nur alle 4 Sekunden nach dem ersten Aufruf beibehalten (vorausgesetzt, sie wird mit autoplay = true aufgerufen). Sie benötigen zunächst etwas, um die Schleife zu initiieren. Stellen Sie es sich vor, als würden Sie einen Slinky über die Kante einer Treppe schieben. Es wird weitergehen, sobald Sie es in Bewegung setzen, aber Sie müssen es einen ersten Stoß geben, um es zu starten. – Ender

+0

Ok ich verstehe jetzt! Tausend Dank! –

Verwandte Themen