2016-05-24 12 views
1

Ich erstelle ein HTML5 Bildkarussell mit drei Bildern. Die Übergänge werden mit TweenMax und TimeLine durchgeführt. Ich habe zwei Klickereignisse, eines für das nächste Bild und eines für das vorherige Bild, die nächste Bildfunktion läuft einwandfrei und ist eine Endlosschleife, aber die vorherige Funktion stoppt, nachdem sie einmal durch die Bilder gegangen ist. Hier ist der Code.Bildkarussell wird nicht unendlich rückwärts kreisen

HTML:

<div id="expanded-state"> 
    <div id="expanded-exit"></div> 
    <div id="close-btn"></div> 
    <button id="arrow-prev"></button> 
    <button id="arrow-next"></button> 
    <div id="theater"> 
     <div class="theater"></div> 
     <div class="theater"></div> 
     <div class="theater"></div> 
    </div> 
    <div id="cta"></div> 
    <div id="footer"></div> 
    </div> 
</div> 

CSS:

.theater { 
    width: 970px; 
    height: 345px; 
    position: absolute; 
    top: 0px; 
    left: 0px; 
    z-index: 1; 
} 

.theater:nth-child(1){ 
    background: url(theater-01.jpg); 
} 

.theater:nth-child(2){ 
    background: url(theater-02.jpg); 
} 

.theater:nth-child(3){ 
    background: url(theater-03.jpg); 
} 

JS:

var $slides = $(".theater"); 
var currentSlide = 0; 

function addListeners() { 
    arrowPrev.addEventListener('click', theaterScrollPrev); 
    arrowNext.addEventListener('click', theaterScrollNext); 
} 

function theaterScrollNext() { 

    tm.to($slides.eq(currentSlide), 0.5, {left:"-970px"});   

    if (currentSlide < $slides.length - 1) { 
     currentSlide++; 
    } 
    else { 
     currentSlide = 0; 
    } 

    tm.fromTo($slides.eq(currentSlide), 0.5, {left: "970px"}, {left:"0px"}); 
} 

function theaterScrollPrev() { 

    tm.to($slides.eq(currentSlide), 0.5, {left:"970px"});  

    if (currentSlide < $slides.length - 1) { 
     currentSlide--; 
    } 
    else { 
     currentSlide = 0; 
    } 

    tm.fromTo($slides.eq(currentSlide), 0.5, {left: "-970px"}, {left:"0px"}); 
} 
+0

erweitern meine Frage ein wenig. jQuery ist so sperrig, also habe ich mich gefragt, ob es einen Vanilla-Js-Weg gibt, um diese Funktion zu erfüllen. Meine js Chops sind noch nicht so toll. Vielen Dank. –

+0

Sie sollten die Eigenschaft 'x' und nicht die Eigenschaft' left' animieren, damit Sie auf Subpixelebene animieren können. CSS-Positionsoffsets wie 'left' animieren nur auf Pixelebene. Das Animieren von 'x' und' y' nutzt die Hardwarebeschleunigung aus. Das Animieren der CSS-Position-Offsets wie "links" löst das Layout aus und führt nicht zu seidenweichen Animationen. http://www.paulirish.com/2012/why-moving-elements-with-translate-is-better-than-posabs-topleft/ –

Antwort

0

Ich glaube, das es beheben sollte, aber mir sagen, ob es nicht

tut
function theaterScrollPrev() { 
    console.log('previous clicked') 
    tm.to($slides.eq(currentSlide), 0.5, {left:"970px"});  

    if (currentSlide <= 0) { 
     currentSlide = $slides.length -1; 
    } else { 
    currentSlide--; 
    } 

     tm.fromTo($slides.eq(currentSlide), 0.5, {left: "-970px"}, {left:"0px"}); 
} 

Codepen Fixed

+0

danke @Riddell, aber das hat es nicht behoben. Die erste Folie wird beim Laden der Seite angezeigt. Wenn Sie jedoch auf die vorherige Schaltfläche klicken, wird ein leerer Rahmen angezeigt. –

+0

Könntest du ein jsFiddle machen, damit ich mich selbst ausprobieren kann, Ryan? Es würde viel helfen, das Problem zu verstehen. – Riddell

+0

Ich benutze Codepen. http://codepen.io/RECopeland/pen/grVyRY –