2011-06-24 14 views
3

私はJQuery CSS3画像ギャラリーを構築しました。問題は、以下のコードの次の関数が問題にならないということです。JQuery .next()関数は次の要素を1つではなく

function gallery() { 

     var islide = $('.cornerimg:visible'); 
     $(islide).removeClass('cornerimgfocus'); 
     $(islide).next().addClass('cornerimgfocus'); 
     setTimeout(function() { 
      gallery() 
     },4000); 
} 
$(window).load(function() { 
    $('.cornerimg').first().addClass('cornerimgfocus'); 
    setTimeout(function() { 
      gallery() 
     },4000); 
}); 

次の機能は、次の要素だけでなく次のすべての要素で機能します。その結果、クラス.cornerimgの最初の要素に続くすべての要素が一度に可視になります。

HTML

<div class="imageitem">  
    <div class="cornerimg" style="background-image:url(http://www.golfbrowser.com/wp-content/uploads/2011/05/DSC00764s-968x400.jpg);"></div> 
    <div class="cornerimg" style="background-image:url(http://www.golfbrowser.com/wp-content/uploads/2011/05/DSC00762s-968x400.jpg);"></div> 
    <div class="cornerimg" style="background-image:url(http://www.golfbrowser.com/wp-content/uploads/2011/05/DSC00759s-968x400.jpg);"></div> 
</div> 

任意のアイデア?

マーベラス

+2

何をしたいあなたは '$(islideを)'記述する必要はありませんだと思います。 – SLaks

答えて

2

.cornerimgfocus。これは、あなたのコードから見ることができる限り、表示されるべき/表示されるはずのスライドです。 :visibleセレクタがすべてのdivを選択しているようです。 API documentationから

function gallery() { 

     var islide = $('.cornerimgfocus'); 
     islide.removeClass('cornerimgfocus'); 
     islide.next().addClass('cornerimgfocus'); 
     setTimeout(function() { 
      gallery() 
     },4000); 
} 
+0

まあ...... –

4

.next()セット内の各要素の後に次の要素を選択します。

セットがn個の要素を持っている場合、.next()n個の要素を持つことになります。

おそらく.first().next()または.eq(1)が必要です。私はあなたの他の質問に答えに言ったように

1

:「のセット内の各要素の直後の兄弟を取得します。一致した要素。 jquery next()

あなたの最初のセレクタはすべてのcornerimg divを返すので、次にそれぞれの次の要素を返します。

(SLaksが言ったようにislide周り)が、$を(削除)前と同じようにあなたのコードの残りの部分を継続し、最初の要素を取得するためにこれをやってみてください

あなたが選択しないのはなぜ
var islide = $('.cornerimg:visible').eq(0); // or .first() 
1

Get the immediately following sibling of each element in the set of matched elements.だから、それだけで(nextAllではなく)すぐに次の要素を取得します。問題は、$(islide)には多数の隣接要素が含まれているため、$(islide).next()は、その1つの直後のすべての要素(つまり、$(islide)の最後の要素に続く最初の要素と最後の要素を除いた$(islide)のすべての要素)を含みます。あなたが望むものに応じて、$(islide).last()$(islide).next(':not(.cornerimg)')のようなものを試してみてください。

0

私は、これはあなたが

function gallery(elem) { 

    $(elem).removeClass('cornerimgfocus'); 
    $(elem).next().addClass('cornerimgfocus'); 
    setTimeout(function() { 
     if($(elem).next().length!=0) 
     gallery($(elem).next().first()); 
    },4000); 
} 
$(window).load(function() { 
$('.cornerimg').first().addClass('cornerimgfocus'); 
setTimeout(function() { 
     gallery($('.cornerimg:visible').first()) 
    },4000); 
}); 
関連する問題