2016-08-10 4 views
0

Ich habe einen Bild-Slider gemacht, aber dies ändert nicht die Bilder, nur das erste Bild zeigt.Image Slider funktioniert nicht

Dies ist mein Javascript

$(document).ready(function() { 
    var slides = document.querySelectorAll('#images .image'); 
    var current = 0; 


    function nextImage() { 
    image[currentSlide].className = 'slide'; 
    current = (current+1)%images.length; 
    images[current].className = 'image show'; 
    } 
    var Interval = setInterval(nextImage,2000); 
}); 

html:

<ul id="images"> 
    <li class="image show">Slide 1</li> 
    <li class="image">Slide 2</li> 
    <li class="image">Slide 3</li> 
    <li class="image">Slide 4</li> 
    <li class="image">Slide 5</li> 
</ul> 

Ich bin mit jQuery 3.1.0 und es funktioniert nicht

+0

Erste Sache Move-Funktion 'nextSlide' aus document.ready –

+0

Haben Sie Fehler in Ihrer Konsole? –

+0

warum Sie currentSlide = (currentSlide + 1)% slides.length benötigt haben; ? kann nicht nur currentSlide = currentSlide + 1; würde für dich arbeiten? möglicherweise müssen Sie überprüfen, Anzahl der Folien Bedingung außerhalb – Rupal

Antwort

0

Ich habe Ihren Code überprüft und es scheint gut zu funktionieren, abgesehen von dem unnötigen Anruf nextSlide() nahe dem Ende des Dokuments bereit. Vielleicht ist es dein CSS? Bitte führen Sie diesen Arbeits Code-Schnipsel:

$(document).ready(function() { 
 
\t var slides = $('#slides .slide'); 
 
\t var currentSlide = 0; 
 
\t var slideInterval = setInterval(nextSlide, 2000); 
 

 
\t function nextSlide() { 
 
\t \t slides.removeClass('showing'); 
 
\t \t currentSlide = (currentSlide + 1) % slides.length; 
 
\t \t slides.eq(currentSlide).addClass('showing'); 
 
\t } 
 
});
.slide {display:none;} 
 
.showing {display:block;}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script> 
 
<ul id="slides"> 
 
    <li class="slide showing">Slide 1</li> 
 
    <li class="slide">Slide 2</li> 
 
    <li class="slide">Slide 3</li> 
 
    <li class="slide">Slide 4</li> 
 
    <li class="slide">Slide 5</li> 
 
</ul>

ich gemischte Vanille JS entfernt und verwenden jQuery Dinge zu halten konsistent.

Einige andere Dinge als Javascript überprüfen kann überhaupt nicht ausgeführt werden:

  • prüfen, um Fehler in der Konsole
  • Überprüfen Sie jQuery verknüpfen richtig (vor Ihrem Code, Script-Tags analysiert und ausgeführt von oben nach unten in Reihenfolge, außer Sie anders angeben)
  • Stellen Sie sicher, dass Sie nur eine $(document).ready pro Seite haben.
+0

Nicht, dass es wichtig ist, und ist sicherlich nicht mein Platz, um das zu sagen, aber Sie sollten nie Vanille js zugunsten von jQuery entfernen .... es ist die Optimierung des Codes, besonders in diesen einen Linern. – Dellirium

+0

Ja, aber wenn das OP bereits jQuery verwendet, können sie es auch für diesen Zweck verwenden. – Lew

+0

Ich benutze jquery 3.1.0 und es funktioniert nicht für mich – Pxion

0

ich Ihre js Code-Bit aktualisiert haben, können Sie versuchen Sie es mit diesem

$(document).ready(function() { 
    var slides = document.querySelectorAll('#slides .slide'); 
    console.log(slides); 
    var currentSlide = 0; 
    var slideInterval = setInterval(nextSlide,2000); 

    function nextSlide() { 
    slides[currentSlide].className = 'slide'; 
    currentSlide = currentSlide + 1; 
    if (slides.length == currentSlide) { 
     currentSlide = 0; 
    } 
    slides[currentSlide].className = 'slide showing'; 
    } 
    nextSlide() 
}); 
+0

Ja etwas korrekt, aber bitte beachten Sie, dass ich die Anweisung currentSlide = currentSlide + 1; vor dieser Bedingung würde ja auch length-1 nicht funktionieren – Rupal