• 締切済み

jQueryのforループ時のanimate

jQueryにて下記のように 配列にて登録した要素に対して forループにてanimateを実行し、 completeで、animate完了後の動作を実行したいのですが、 forループにて複数に対して処理を行った際の挙動がおかしく、 動作を実行する前にcompleteの処理が走ってしまいます。 どのようにすれば、forループで複数のanimate処理をおこなっても 動くことができるようになるのか、 教えて頂けますよう宜しくお願いいたします。 -------------------------------------------------------------------- $(document).ready(function () {  for(i=0; i<10; i++){   pArray($('p').eq(i));  };  for(i=0; i<10; i++){   pArray[i].stop().animate({left: -100 * i}, {duration:1500, easing:'swing',complete:aaa()});  }  function aaa(){   alert('完了')  } }

みんなの回答

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.1

ご提示のコードからではpArrayに何がはいっているのかよくわかりませんが… それとは別に、animateの設定で  complete:aaa() だと、アニメーション定義時にaaaが評価されますので、アニメーション開始時にalertが出ます。 ループ処理とは基本的に関係はないでしょう。 ご希望のようにしたいなら、  complete:aaa とするか、  function aaa(){    return function(){ alert("完了");}  } とするなどで実現できませんか?

関連するQ&A

  • 【jQuery】for文ではイベント登録できない?

    複数のボタンがあり、それぞれがクリックされると、 対応したdiv要素がanimateを行う、というギミックを作成しております。 配列に複数のボタンのid名と、各div要素のid名を格納しておき、 for文でclickイベントを登録しようとしましたが、うまく動作しませんでした。 【例1】 jQuery(function($){  var buttonArray = ["#button0", "#button1", "#button2"];  var divArray = ["#box0", "#box1", "#box2"];  for(i=0; i<buttonArray.length; i++){   $(buttonArray[i]).click(function(){    $(divArray[i]).animate({width: "0px"}, "slow", "swing");   });  } }); --------------------------------------------------- 以下のように書くと、正常に動作しました。 【例2】 jQuery(function($){  var buttonArray = ["#button0", "#button1", "#button2"];  var divArray = ["#box0", "#box1", "#box2"];  $(buttonArray[0]).click(function(){   $(divArray[0]).animate({width: "0px"}, "slow", "swing");  });  $(buttonArray[1]).click(function(){   $(divArray[1]).animate({width: "0px"}, "slow", "swing");  });  $(buttonArray[2]).click(function(){   $(divArray[2]).animate({width: "0px"}, "slow", "swing");  }); }); --------------------------------------------------- そこで質問なのですが、 ・for文ではイベントの登録は行えないのか? ・今回のようなケースの場合、どのように書くのが適切か? 上記2点に関して、ご回答、ご意見を頂けますと幸いです。 どうぞよろしくお願い申し上げます。

  • javascriptのforループ中の変数について質問です。

    javascriptのforループ中の変数について質問です。 下記のようなコードを書きました。 function test(){ for (i = 0;i < 3;i++){ var msg = "msg"+i; setTimeout(function(){ alert(msg); },1000 * i); } } これを実行すると、1秒間隔で順番に"msg2"→"msg2"→"msg2"と表示されます。 しかし、期待する動作は1秒間隔で順番に"msg0"→"msg1"→"msg2"なのです。 この動作を実現するために、どのようにスクリプトを修正すればよいか、ご教授いただければ幸いです。

  • JavaScript アニメのループ動作について

    iOSでSWFが動かないことから、JavaScript で簡単なアニメを作ろうと思っています。 初めてなので、アニメのループ動作に詳しい方教えてください。 (jQueryと合わせて、動作させます) 2個の動作を定義しています。 《動作A》 $(function(){ setTimeout(function(){ $('#photo').animate({ width: "776px", opacity: 1, }, 1500 ); },500); //500遅らせる指示 }); 《動作B》 $(function(){ setTimeout(function(){ $('#word').animate({ width: "398px", opacity: 1, }, 3000 ); },700); //700遅らせる指示 }); このうち、動作Bのみを 動作完了 → 1000msec 表示キープ → 3000msec の逆動作で消える → 1000msec 表示無し これを一連の動作として、ループさせたいのです。 interval 関連のコマンドの説明を見ましたが、自分にはわかりませんでした。 《動作B》に書き足して、ループできるなら、具体的記述で教えてください。 以上、よろしくお願いします。

  • Forループの制御について

    VB 2005,Framework2.0を使用しています。 For文を使ったループについてお尋ねしたいことがあります。 For i As Integer = 0 To 10     ’処理 Next i とあったとします。 そうするとループ変数iが0から10になるまで連続してループを行うのですが、これをある条件の時に現在のループ変数から一つ飛ばして次のループからまた処理を行いたい場合どのようにすれば良いのでしょうか? 例えば0~10回中に、現在5回目で特定の条件が一致したときその次の6回目のループは飛ばして7回目のループから再開したいです。 ちなみにこの様に書いても0から10回必ずループされてしまいました。 Dim TEST(10) As Integer TEST(5) = 1 For i As Integer = 0 To 10 If TEST(i) = 1 Then i = i + 1 End If Next i

  • For文の終了値を関数にしても問題ないですか

    VB6です。 For文の終了値が関数になっている場合、この関数の評価はFor文を実行する最初に1回しか行われない(関数は1度しか呼ばれない)ということがVBの規約か何かどこかで明記されているでしょうか。 例) For i = 0 To Func(i) (処理) Next Function Func(i as integer) as integer Func = i + 1 End Function という風に記述した場合、(処理)が2回実行されるてループを抜けることが確認できました。これはi=0のときに関数Funcを一回だけ実行しているということです。(デバッグモードでそれを確認) これは、規定の動作なのかそれともたまたまなのでしょうか。 上記のFor文でもし毎回Funcが評価されると無限ループになってしまいます。

  • jQuery hover時に遅延させる方法

    よろしくお願い致します。 jQueryを使用して以下のようなコードを書いております。 $('#hoge').hover( function(){ $(this).animate({'marginTop':'100px'},500,'easeOutQuart'); }, function(){ $(this).animate({'marginTop':'0px'},500,'easeOutQuart'); } ); 上記のコードで問題なく動作するのですが、要素(#hoge)からマウスを離したときにだけ遅延処理をさせたいと思い、以下のようなコードを書いてみたのですが動作しません。 $('#hoge').hover( function(){ $(this).animate({'marginTop':'100px'},500,'easeOutQuart'); }, function(){ setTimeout(function(){ $(this).animate({'marginTop':'0px'},500,'easeOutQuart'); },1000); } ); この場合、どのようなコードを記述すれば良いのでしょうか?

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

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

  • コンテンツを上下に動かすには

    Javascript初心者です。よろしくお願いします。 コンテンツをふわふわと上下に動かしたいです。 下記サイトの「ふわふわしてるコンテンツ」を参考にしました。 http://kaelab.ranadesign.com/mtctrl/mt-search.cgi?blog_id=1&tag=jQuery&limit=20 複数(20個程)のコンテンツを動かしたいのですが それぞれに速度やふり幅を変えるにはどうすれば良いでしょうか。 今は、上記ブログに書いてあった下記コードを20個記載しています。 (function(){ var i = 0; (function move(){ i = i > 0 ? -1 : 1; var p = $("#test01").position().top; $("#test01").animate({ top: p + i * 3 }, { duration: 500, complete: move }); })(); })(jQuery); また一定ではなく animate({ top: p + i * 3 }と animate({ top: p + i * 8 } というふうに、ふり幅も2種類を繰り返し設定したい場合は どうすれば良いのでしょうか。 よろしくお願いします。

  • Jquery.ajaxでHTML読み込み

    現在、Jquery.ajaxを使って外部HTMLの読み込み処理を行い、処理完了後にフェードで表示させるということをしているのですが、読み込んだHTMLに貼り付けてある画像が読み込まれる前にHTMLが表示されてしまい、困っています。 Jquery.ajaxでは内包されている画像の監視まではできないのでしょうか? 下記が今作っているコードです。 $contest.css({ "opacity": 0 }); $.ajax({ type: "GET", url: "hoge.html" dataType: "html", success: function(data) { $contest.html($(data).find("#hoge")); }, complete: function() { $contest.stop().animate({ "opacity": 1 }, 1000, "easeOutCubic"); } }); おわかりになる方、ご教授お願いします。

  • perl:ループのカウンタ変数の値を保持したい。

    While文のループのなかにfor文でループをまわしているスクリプトなのですが、 forの中でカウンタ変数をつくり、ループ回数を計測しております。 またforの中である条件を満たした際に、lastでforを抜け、引き続きWhileのループを継続するという処理をしております。 $i=0; While(○○){ 処理1    for(××){ 処理2 $i++;      if($i >=100){  処理3       last; } } } ここで、一度for文のif文で一度forループを抜け、Whileでループをし、またforループに突入した際に、前回forループでカウントした$iの値を保持したまま、そのつづきから$iのカウンタを動作させたいのですが、$iの値はforループを抜けるとリセットしてしまいます。 このような場合、どうすれば$iの値を保持できますでしょうか。 お詳しい方、宜しくお願い致します。 ※ネストがうまく表現できず、みずらくてスミマセン。

    • ベストアンサー
    • Perl