• ベストアンサー

ループ処理を一定時間毎にしたい。

お世話になります。 処理1 s = s + 4; 処理2 $("a#sakuin")[0].click(); 処理3 $("a#sakuin2")[0].click(); 処理1 ↓ 処理2→処理1の5秒後に実行 ↓ 処理3→処理2の5秒後に実行 これらを変数sが40になるまでループ処理したいのですがどのようにすればよいでしょうか? よろしくお願いします。

noname#254390
noname#254390

質問者が選んだベストアンサー

  • ベストアンサー
回答No.6

>回答No.5 amanojaku1 >>処理毎に別々の秒数にしたい場合はどのようにすればよいでしょうか? >「setInterval()」から「setTimeout()」に変更されている事に注意して下さい。 >ProcessNextTime変数でターマーの時間をミリ秒で設定しています。 初期値を「ProcessCnt = -1;」にすれば、もっとスマートにできました。 <script type="text/javascript"><!-- s = 0; // ProcessArrayに配列を代入 ProcessArray = [ // 配列の要素はゼロ・スタートです。 function (){s = s + 4;console.log("処理1:s="+s);}, // 配列の要素[0]に関数を定義 function (){console.log("処理2:");}, // 配列の要素[1]に関数を定義 function (){console.log("処理3:");} // 配列の要素[2]に関数を定義 ] ProcessNextTime = [500, 1000, 2000]; // ミリ秒で指定 ProcessCnt = -1; // 「(ProcessCnt+1)%ProcessArray.length;」はゼロになります。 TimerManager(); function TimerManager(){ ProcessCnt = (ProcessCnt+1)%ProcessArray.length; ProcessArray[ProcessCnt](); console.log(ProcessNextTime[ProcessCnt]); if(s<40){ setTimeout("TimerManager()",ProcessNextTime[ProcessCnt]); } // 次のタイマーを設定。 } // --></script>

noname#254390
質問者

お礼

うまくできました! ありがとうございました!

その他の回答 (5)

回答No.5

>処理毎に別々の秒数にしたい場合はどのようにすればよいでしょうか? 「setInterval()」から「setTimeout()」に変更されている事に注意して下さい。 ProcessNextTime変数でターマーの時間をミリ秒で設定しています。 <script type="text/javascript"><!-- s = 0; // ProcessArrayに配列を代入 ProcessArray = [ // 配列の要素はゼロ・スタートです。 function (){s = s + 4;console.log("処理1:s="+s);}, // 配列の要素[0]に関数を定義 function (){console.log("処理2:");}, // 配列の要素[1]に関数を定義 function (){console.log("処理3:");} // 配列の要素[2]に関数を定義 ] ProcessNextTime = [500, 1000, 2000]; // ミリ秒で指定 ProcessCnt = 0; ProcessArray[0](); // 配列の要素[0]の関数を実行。 setTimeout("TimerManager()",ProcessNextTime[ProcessCnt]); function TimerManager(){ ProcessCnt = (ProcessCnt+1)%ProcessArray.length; ProcessArray[ProcessCnt](); console.log(ProcessNextTime[ProcessCnt]); if(s<40){ setTimeout("TimerManager()",ProcessNextTime[ProcessCnt]); } // 次のタイマーを設定。 } // --></script>

回答No.4

>回答No.3 amanojaku1 簡単に関数内から「ProcessCnt++;」を追い出せました。 <script type="text/javascript"><!-- s = 0; // ProcessArrayに配列を代入 ProcessArray = [ // 配列の要素はゼロ・スタートです。 function (){s = s + 4;console.log("処理1:s="+s);}, // 配列の要素[0]に関数を定義 function (){console.log("処理2:");}, // 配列の要素[1]に関数を定義 function (){console.log("処理3:");} // 配列の要素[2]に関数を定義 ] ProcessArray[0](); // 配列の要素[0]の関数を実行。 ProcessCnt = 1; IntervalTimer = set = setInterval(function (){ if(ProcessArray.length<=ProcessCnt){ ProcessCnt = 0; } ProcessArray[ProcessCnt](); ProcessCnt++; if(40<=s){ clearInterval(IntervalTimer); } // タイマーの停止。 }, 1000); // ミリ秒で指定:1秒で実行しています、5秒なら「5000」を指定して下さい。 // --></script>

noname#254390
質問者

補足

回答ありがとうございます。 こちらのやり方ですとそれぞれの処理の実行間隔が同じ秒数になりますが、処理毎に別々の秒数にしたい場合はどのようにすればよいでしょうか?

回答No.3

はい、t_ohtaさんが仰ってるとおりです。 で実際は どうすれば良いのかと言うと <script type="text/javascript"><!-- ProcessCnt = 0; s = 0; // ProcessArrayに配列を代入 ProcessArray = [ // 配列の要素はゼロ・スタートです。 function (){ProcessCnt++;s = s + 4;console.log("処理1:s="+s);}, // 配列の要素[0]に関数を定義 function (){ProcessCnt++;console.log("処理2:");}, // 配列の要素[1]に関数を定義 function (){ProcessCnt++;console.log("処理3:");} // 配列の要素[2]に関数を定義 // 「ProcessCnt++;」は必須です。 ] ProcessArray[0](); // 配列の要素[0]に関数を実行。 IntervalTimer = set = setInterval(function (){ if(ProcessArray.length<=ProcessCnt){ ProcessCnt = 0; } ProcessArray[ProcessCnt](); if(40<=s){ clearInterval(IntervalTimer); } // タイマーの停止。 }, 1000); // ミリ秒で指定:1秒で実行しています、5秒なら「5000」を指定して下さい。 // --></script>

  • t_ohta
  • ベストアンサー率38% (5086/13295)
回答No.2

setTimeout を使ってやれば順番に実行できるけど、jQueryの ].click() ってクリックイベントが発生した時の処理を定義する関数であって、クリックイベントを起こしてくれる訳じゃありませんよ。

  • maiko0333
  • ベストアンサー率19% (840/4403)
回答No.1

関連するQ&A

  • 一定時間後にsetIntervalでループ処理を行うにはどうしたらいい

    一定時間後にsetIntervalでループ処理を行うにはどうしたらいいのでしょうか。 JavaScriptにwait関数があれば早いのですが、setTimeout()のなかに入れ込むしか思いつきません。 forやwhile等で空ループさせて終了後に実行という方法も考えましたが、CPUに余計な負荷がかかるみたいでこれは避けたいです。 具体的には次のようなことがしたいと思っています。 function(a,b,c){ setTimeout(function(){ setInterval(function(){} ,10 ) },c) しかしこれだと再下段の関数が実行されないようです。またループ処理は可能な限りsetInterval()にさせたいと思っています。クロージャで解決できるんでしょうか。何か良い方法がありましたらお願いします。

  • setTimeoutをループさせDOMを処理したい

    「setTimeout」「for文」「jQuery」を利用して、1秒ごとに、 <div class="hoge1">、<div class="hoge2">、<div class="hoge3">へ対して、同じ処理をしたいです ■処理内容イメージ ・ループカウントの変数iを渡して、それぞれのdiv内で、1、2、3と表示 ■質問 「setTimeout」を1秒ごとに、指定DOMへ対して、ループさせる方法を教えてください ※ループできるなら、「for文」じゃなくても良いです

  • エクセルマクロ 異なる変数でのループ

    エクセルマクロのループ処理に関して、 異なった変数を使いループをさせたいです。 例えばA~Dまでの変数があり、変数Zに順々に変数を代入して処理をさせたいです。 ループ開始 Z = [A-D] (変数Zを使う処理) ループ終了(繰り返し) 1回目にA 2回目にB ・ ・ といったイメージです。 初歩的な質問で恐れ入ります。 よろしくお願いします。

  • DOSコマンドでの単純なループ処理

    DOSコマンドで単純なループ処理を記述する方法を教えて下さい。 UNIXで下記のようにwhileコマンドを使用すると、 /export% While(1) ? ループ処理で実行させたいコマンドを記述 ? echo "" ? sleep 3 3秒おきにコマンドの標準出力が表示されます。 Windowsで同じようなことができたらいいなと 思うのですが、簡単な方法を知っている方がいたら 教えて下さい。

  • [Objective-c] NSlogとループ

    Objective-cの勉強を始めたばかりです。 ループ処理内のNSlogについて質問させてください。 下の方にあるソースコードにて実行すると、 何回かに1回なのですがループが最後まで回らずNSlogにて 最後まで出力されない。 ( 変数aの値は32です のように途中までしか出力されない、  一番最後までループすれば 変数aの値は1024です が出力されて  ループを抜けるはずです。) MacOSX10.7.4 Core i5 2.2GHz Xcode 4.3.2 そこで下記複数質問があります。 1.内部でどんなエラーが起こっているのでしょうか?  (メモリー確保・解放ができていない?   前回処理が完了する前に次の処理を実行しようとしている?) 2.下部ソースのコメントアウトにインターバル(sleepForTimeInterval)を  もうける処理がありますが、これをコメントはずして実行すると、  何度実行しても最後まで出力されるようになりました。  このような処理を入れるのが当たり前なのでしょうか? #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { // insert code here... int a=1; for(;a<1000;a=a*2) { // [NSThread sleepForTimeInterval:0.005]; NSLog(@"変数aの値は%dです\n",a); } } return 0; } 以上、よろしくお願いいたします。

  • PHPのプログラム中に一定時間処理を待ちたい場合

    例えばwhileループがあったとし、下記のように5秒などまってから処理関数に入るように作りたいのですが、何かいい方法はないでしょうか? while($i!=1){ 処理待ち関数 処理関数 }

    • ベストアンサー
    • PHP
  • PHP プログラム ループ処理

    プログラム初心者です、ループ処理についてうまい解決方法が思い浮かばず相談させて頂きます。 ループ処理において、ループ内で変数を定義するのに違う名前を指定するにはどのような方法があるのでしょうか 例えばwhileの場合 $i =0; while($i<10){ $hoge = $i; $i++ } この$hogeを2順目には$hoge1、3順目には$hoge2と言うように増やしたり一定の法則に乗っ取って変数名を変更するにはどのように書けばいいのでしょうか。 どなたかご教授頂ければと存じます、宜しくお願い致します。

    • ベストアンサー
    • PHP
  • ループ処理について

    下記のようなScriptを記述しました。 for(i = 1; i <= 4 ; i++) { trace("A") ; var fileload:LoadVars = new LoadVars(); fileload.load("b"+i+".jpg"); fileload.onLoad = function(success:Boolean) { trace("B") ; if (!success) { ok_flg = 1; } else { a.duplicateMovieClip("b"+i, i); this["b"+i].loadMovie("b"+i+".jpg") ; this["b"+i]._x += (i - 1) * 90 ; } }; } 本来ならJPEGが存在する分だけ読込むと言う処理をしたいのですが、テスト的に3ファイル用意してテストしました。 JPEGの命名規則は「b1~b3」としています。 普通のループ文であれば問題無く3件のJPEGが表示されますが、読み込みが成功したか否かの判断文を入れると動作がおかしくなります。 TRACEを入れてみたら、 A A A A B Error opening URL "file:///C|/Documents%20and%20Settings/xxxxx/デスクトップ/b4.jpg" B B B このように最初に読み込みの処理を実行し、その後に成功したか否かの判定が処理されます。 これって、正常なループの処理でしょうか?。 また、私が処理したかったようにするにはどのようなScriptにすれば良いのでしょうか?。 宜しくご教授ください。

    • ベストアンサー
    • Flash
  • BShell 動的配列のループ処理について

    動的に変数名を作成した配列について、ループ処理を行う場合、どうしたらいいでしょうか 以下のような処理を書いたのですが、駄目でした。 a=0 while [ ${a} -ne 10 ] do     eval $(printf TEST%02d $a)=(aaa bbb ccc) #TEST00 - TEST10の配列が作られる。     # TEST00 - TEST10の配列の中身にたいして処理を行いたい。。。     for (( I=0; I < ${#`eval $(printf TEST%02d $a)[@]`}; ++I )) # エラー     do         // ここで処理したい・・・     done done いいアイディアがありましたらご教授よろしくお願いいたします。

  • sqlcmdのループ処理について

    バッチ(sqlcmd)のループ処理について質問です。 SQLやバッチについて最近学び始めた初心者です。 5つのSQLファイルを順番に実行して正常に動作するかループしながら確認をしたいのですが、その場合はfor文を使用すれば良いでしょうか? 調べてもループ回数とファイル指定を同時に行えなさそうだったので、方法を教えていただきたいです。よろしくおねがいします。