2011-07-05 7 views
1

jQuery .animateメソッドを使用してスタックしたカードをアニメーション化しています。これらを仮定 4枚のカードが視覚的にあなたがクリックしたときに、今私はクリック、次々にこれらのそれぞれをアニメーション化する[#card1][#card2][#card3][#card4][#card5]jQuery.animateでDOMオブジェクトを動的に渡す

彼らのdivタグ、#card1#card2#card3#card4は、アレイcardStack() に格納されて表示されますそれら。 どうすればいいですか

while(cardStack[0]!="undefined"){ 
    $('#cardStack[0]').click(function() {  
    $('#cardStack[0]').animate({"left": "+=130px","z-index": "1",queue:false},500); 
}); 
i--; 
} 

これは可能ですか?

保存カードの配列への参照:あなたが実際に何かを学ぶことができるように

+0

左のものをクリックすると、それらはすべて次々とアニメーション化されますか、左のものをクリックすると左のもののみがアニメーション化されますか? – AlienWebguy

+0

配列にjqueryオブジェクトが格納されていますか?またはidsだけ? –

+0

@AlienWebguy:一番左をクリックすると左にスライドし、次の露出したカードをクリックするとスライドします。 – maverick340

答えて

3

私は、ソースに注釈を付けます。

var cards = $('#cards div'); 

最初に反転したカードは、私たちのアレイの外にあります。

var flippedIndex = cards.length; 

次に、我々は、カードが反転された情報を含む、(cards配列と同じ長さを有する)配列を作成します。

var flipped = new Array(flippedIndex); 

flip機能は、カードのクラス属性をアニメーション化および変更します。

var flip = function (card, toggle) { 
    card.slideUp(function() { 
     card.toggleClass('back', toggle) 
      .slideDown(); 
    }); 
}; 

ここで、クリックリスナーを設定します。

cards.click(function() { 
    var card = $(this), 

.index()http://api.jquery.com/index/は)あなたは、左から右にカードの位置を与えます。

index = card.index(); 

はカードが反転しているかどうかを確認するために私たちのflipped配列を検索し、それが最後のカードを裏返しだことを確認してください。

if (!flipped[index] && index + 1 === flippedIndex) { 
     flippedIndex = index; 

ここでは、カードを反転します。

flip(card, (flipped[index] = true)); 
} else if (flipped[index] && index === flippedIndex) { 
    flippedIndex++; 

ここでは解除します。

 flip(card, (flipped[index] = false)); 
    } 
}); 
+0

上記の問題は、私は2番目または3番目のカードをクリックすることもできます。私はユーザーが最も右のカードだけをクリックできるようにしたい。実生活のように、開いているカードだけを一枚ずつスライドさせることができます。 – maverick340

+0

http://jsfiddle.net/yak5C/3/ これは私がやりたいことです。 – maverick340

+0

私は、ここに行く参照してください:http://jsfiddle.net/U32qt/4/ – katspaugh

関連する問題