- ベストアンサー
JavaScriptでアニメのループ動作を実現する方法
- iOSでSWFが動かないため、JavaScriptを使用して簡単なアニメーションを作成したいと考えています。
- アニメのループ動作について詳しい方に教えていただきたいです。
- 具体的には、2つのアニメーション動作を定義し、そのうちの1つをループさせたいです。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
ANo1です。 繰返しの1回分を、setTimeoutなどを利用して書いてしまうとややこしくなります。(出来ないことはないですが…) 普通にanimate関数とそのcallbackを利用して1回分を記述しておいて、それをsetTimeoutやsetIntervalなどで繰り返すのがわかりやすいかと思います。 ANo1もそのようなつもりで、回答いたしました。 (もちろん、方法は他にもいろいろあると思います) 待つ時間や動きの内容がご質問文と補足で違うので、どれが本当なのか不明ですが、とりあえず単純化したサンプルを以下に。 (全角空白は半角に) $(function(){ //初期設定 var target = $("#light").css({width:0, opacity:0}); //繰り返しの1回分を定義 var repeat = function(){ target.delay(1000).animate({ width: 398, opacity:1 }, 3000, function(){ target.delay(1000).animate({ width:0, opacity:0 }, 3000); }); } //repeatを繰り返す repeat(); //最初はすぐに実行 var intervaId = setInterval(repeat, 8000); //8秒後から繰返し }); ※時間やタイミング、アニメーションの内容などは適宜調整してください。
その他の回答 (1)
- fujillin
- ベストアンサー率61% (1594/2576)
考え方のみですが… >動作完了 → 1000msec 表示キープ → 3000msec の逆動作で消える → 1000msec >表示無し これを一連の動作として、ループさせたいのです。 1)まず、『動作→表示キープ→逆動作』を行う関数を作成します。 2)これを、setIntervalで8000msec間隔で繰り返します。 これで、ほぼご質問のようになると思います。 1)の関数作成の際にアニメーションを順序を保って実行するには、jQueryを用いているようですので、callback関数を利用することで比較的簡単に実現できると思います。
補足
fujillin 様 自分なりに考えてみました。 >1)まず、『動作→表示キープ→逆動作』を行う関数を作成します。 これを以下のように書きました。 無駄が多いと思いますが、一応動作しています。 (ループ無し、#light 名で定義) ---------------------------------------- //ライトの動き、3000遅れて開始 2000で表示 $(function(){ setTimeout(function(){ $('#light').animate({ width: "770px" , height: "25px" , opacity: 1 , }, 2000 ); },3000); //3000遅らせる指示 }); //ライトの動き、5000保持 $(function(){ setTimeout(function(){ $('#light').animate({ width: "770px" , height: "25px" , opacity: 1 , }, 5000 ); },5000); //5000遅らせる指示 }); //ライトの動き、2000で消える $(function(){ setTimeout(function(){ $('#light').animate({ width: "12px" , height: "25px" , opacity: 0.01 , }, 2000 ); },10000); //10000遅らせる指示 }); //ライトの動き、5000消えた状態保持 17000で動作完 $(function(){ setTimeout(function(){ $('#light').animate({ width: "12px" , height: "25px" , opacity: 0.01 , }, 5000 ); },12000); //12000遅らせる指示 }); ---------------------------------------- >2)これを、setIntervalで8000msec間隔で繰り返します。 これが、判りません。 4個の動作を束ねて、setInterval指示を色々書きましたが、うまく動作しません。 知識不足です。 そこのところ、教えてください。
お礼
書き方が、判りにくく済みません。 delayとjQueryのバージョンに問題あるらしく、 教えていただいた状態では動きませんでした。 //繰り返しの1回分を定義 の内部は、前の自前の 無駄の多い書き方を入れたら動作しました。 ちょっと不細工ですが、とりあえず動いているので。 ありがとうございました。 お礼を申しあげます。