2016-05-24 15 views
1

私は3つの画像を持つHTML5画像カルーセルを作成しています。トランジションはTweenMaxとTimeLineで行います。次の画像と前の画像の2つのクリックイベントがあり、次の画像関数は正しく実行され、無限ループですが、前の関数は画像を一度通過した後に停止します。ここにコードがあります。画像カルーセルは無限に逆ループしません。

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

私の質問を少し広げる。 jQueryは非常に大きいので、同じ機能を実行するためのバニラJSの方法があるのだろうかと思っていました。私のjsチョップはそれほど大きくはありません。ありがとう。 –

+0

サブピクセルレベルでアニメーションできるように、 'left'プロパティではなく' x'プロパティをアニメートする必要があります。 'left'のようなCSSの位置オフセットはピクセルレベルでのみアニメーション化されます。 'x'と' y'をアニメートすると、ハードウェアアクセラレーションが利用されます。 'left'のようなCSSの位置オフセットをアニメートするとレイアウトがトリガーされ、滑らかなアニメーションが得られません。 http://www.paulirish.com/2012/why-moving-elements-with-translate-is-better-than-posabs-topleft/ –

答えて

0

私は、これはそれを修正するが、それは

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

感謝@リドル、しかしそれはそれを修正しませんでした。最初のスライドはページの読み込み時に表示されますが、前のページをクリックすると空白のフレームに移動します。 –

+0

jsFiddleを作って、ライアンを試してみてください。それは問題を理解するのに大いに役立ちます。 – Riddell

+0

私はcodepenを使用しています。 http://codepen.io/RECopeland/pen/grVyRY –

関連する問題