これで問題が解決するはずです:
$(document).ready(function () {
var inner = $('.carousel-inner'),
slides = inner.find('li'),
width = slides.eq(0).outerWidth(true),
max = (width * slides.length) - width;
$('#right, #left').on('click', function () {
var currRight = parseInt(inner.css('right'), 10), move;
if (this.id === 'right') {
move = currRight === max ? 0 : currRight+width;
} else {
move = currRight === 0 ? max : currRight-width;
}
inner.animate({ right: move }, 500);
});
});
right
上の 4 行は要素をキャッシュし、使用できる最大値やwidth
スライドの など、いくつかの基本的な変数を設定します。
次に、click
繰り返しを避けるためにイベントを組み合わせました。クリック イベントの最初の行は、currRight
as$('.carousel-inner')
の現在の CSSright
値と、move
後で使用されるものを定義します。
if (this.id === 'right'){ /* #right */ }else{ /* #left */ }
id
クリックされた要素の がright
またはであるかどうかをチェックしますleft
。if ステートメント内のコードは、スライダーがゼロ (開始) または最大 (終了) にあるかどうかを確認し、move
変数を正しい値に設定します。
ここで動作しています:http://jsfiddle.net/mFxcq/10/
更新:スライドをタイマーで動かすには、クリックイベントがアタッチされた後にこれを追加します:
function setTimer(){
clearTimeout(window.slideTimer);
window.slideTimer = setTimeout(function(){ $('#right').trigger('click'); }, 5000);
};
setTimer();
setTimer();
その後すぐに追加するinner.animate({ right: move }, 500);
と、すべてが期待どおりに機能します。
ここで動作しています: http://jsfiddle.net/mFxcq/14/