現在のコードの問題
i
にはグローバル スコープがあるため、次にループが反復しようとするときi
= 5 となり、ループが反復されなくなります。for の宣言をi
無名関数に移動します。
$('.right_trigger').click(function(event) {
var i=0;
event.preventDefault();
while (i<5) {
$('#skater_mulitivew li').eq(0).fadeOut('slow');
$('#skater_mulitivew li').eq(1).fadeOut('slow');
i++;
});
});
現在のコードの最適化
fadeOut()
ちなみに、関数を 5xと呼ぶ理由がわかりません。次の方法で同じ効果を得ることができます。
$('.right_trigger').click(function(event) {
event.preventDefault();
//If your trying to fadeout all li use the proceeding commented code
//$('#skater_mulitivew li").fadeOut("slow");
//If your actually trying to target by index use the proceeding code
$('#skater_mulitivew li:eq(0),#skater_mulitivew li:eq(1) ').fadeOut('slow');
i++;
});
カルーセルの実装
コメントを考えると、カルーセルのような機能を作りたいようです。これを実現するための html、css、javascript を次に示します。
HTML
<ul id="skater_mulitivew">
<li class="first_gallery">Gallery 1</li>
<li class="second_gallery">Gallery 2</li>
<li class="third_gallery">Gallery 3</li>
<li class="fourth_gallery">Gallery 4</li>
</ul>
<div class="right_trigger">Trigger</div>
CSS
#skater_mulitivew li{
display:none;
}
#skater_mulitivew li:first-child{
display: block;
}
Javascript
$('.right_trigger').click(function(event) {
var items = $("#skater_mulitivew li");
toggle(items,0);
});
function toggle(items, index){
items.eq(index).fadeOut('slow', function(){
index = (index == items.length -1) ? -1:index;
items.eq(index + 1).fadeIn('slow', function(){
toggle(items, ++index);
});
});
}
作業例: http://jsfiddle.net/njxnN/1/