- ベストアンサー
神経衰弱 順番に裏返し
- javascript初心者が練習のために神経衰弱を作っている際に、カードを順番に裏返す要素の書き方がわからない。
- setTimeoutを使用して0.5秒ごとにカードを返すコードを書いているが、うまくいかない。
- 質問者はどのようにすればいいかわからないので、助言を求めている。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
No.1 ですが、例示内容が少々分かりづらい内容だったので修正します。 // 最初のアニメの番号 var index = 0; (function(){ // index番目のアニメ 処理(index); // 次のアニメの番号に更新 index = index + 1; // 次のアニメの番号が条件を満たすなら、Nミリ秒後に再実行 if(条件(index)) { window.setTimeout(arguments.callee, N); } })();
その他の回答 (2)
- fujillin
- ベストアンサー率61% (1594/2576)
よこからですが・・・ No1の補足を斜めに見ただけなので、ちゃんと確認していませんが、 indexをインクリメントしていないので、index=0のまま0.5秒おきにずっと繰り返しているのではないでしょうか?
お礼
お返事ありがとうございます。 おっしゃるとおりでした。 index++;を追加したらうまくいってくれました。 ありがとうございます。
- Ogre7077
- ベストアンサー率65% (170/258)
一定間隔のアニメをやる際に、私が常用するパターンです。 var index = 0; (function(){ 処理(index++); if (条件(index)) window.setTimeout(arguments.callee, N); })(); 少々ややこしいので解説すると、 1. 使い捨ての関数を作って即実行 2. 関数の最後で、条件に合うなら自分自身をN秒後に再実行 3. 条件に合うかぎり、再実行を繰り返す。 4. 条件に合わなくなったら今後は実行されない。関数も(たぶん)廃棄される。 使い捨ての関数には名前がないので arguments.callee を使って自分自身を取得しています。
補足
お返事ありがとうございます。 すいません、まだ解決出来ていないのでよかったらお返事いただけるとうれしいです。 教えていただいたコードを適応したのですが、うまく動いてくれません。 firebugで見たところエラーはないようなので、どこか間違っているとは思うのですが、どこかおかしなところはあるでしょうか。 <script type="text/javascript"> var card_c = 0; //1枚目 var card_first; //altの数 var card_second; //altの数 var click_first; //開けた場所1 var click_second; //開けた場所2 var fullOpen = 0; //ワンペアで1追加 4でクリア function conce(aaa){ //クリックで無地に数字を表示 var imgId = document.getElementById(aaa);//クリックしたimgのid //imgがnone.jpg以外なら操作しない。 switch(card_c){ case 0: imgId.src = imgId.alt+".jpg"; card_c++; card_first = imgId.alt; click_first=aaa; break; case 1: imgId.src = imgId.alt+".jpg"; card_second = imgId.alt; click_second=aaa; card_c++; if(card_first==card_second){//揃ったら card_c=0; fullOpen++; }else{//揃わなかったら function bunki(){ document.getElementById(click_first).src="none.jpg"; document.getElementById(click_second).src="none.jpg"; card_c=0;//setTimeoutのあとだと待つ必要があるためココ } setTimeout(bunki,500);//0.5秒後閉じる } break; default: break; }//switch //全部そろえた時のアクション if(fullOpen==4){ alert("complete!"); var index = 0; (function(){ document.getElementById('c_'+(index+1)).src="none.jpg"; if(index<9)window.setTimeout(arguments.callee,500); })(); fullOpen=0; }//if(fullOpen==4) }//function conce(aaa) </script> よろしくお願いします。
お礼
お返事ありがとうございます。 丁寧にご説明いただきありがとうございます。 どうやらindex++;が抜けいていたらしく、ちゃんと繰り返していなかったようです。 お手数をおかけしました。 ありがとうございました。