2016-09-26 6 views
0

私は円があり、12の円弧セグメントで構成されており、開始パターンから終了パターンへの遷移をユーザーに見せたいと思っています。 (開始パターンと終了パターンが多数あります)。javascript/cssでの連続したアニメーション

私はcssファイルにトランジションプロパティを含めました。これは問題ではありません。ここ

は、これまで私のコードである:

function playAnimations(){ 
console.log("gets inside playanimations") 
var totalLength = document.getElementsByClassName("container")[0].children.length 
console.log(totalLength) 
for(var i = 0; i < totalLength; i++){ 
    var current_pattern = document.getElementsByClassName("container")[0].children[i] 
     for(var j = 0; j < 12; j++){ 
      $('#LED' + (j+1)).css('transition-duration', '0s'); 
      $('#LED' + (j+1)).css({fill: current_pattern.children[1].children[j].style.backgroundColor}); 

     } 

     for(var k = 0; k < 12; k++){ 
      $('#LED' + (k+1)).css('transition-duration', "" + current_pattern.children[3].children[0].value + "ms"); 
      $('#LED' + (k+1)).css({fill: current_pattern.children[2].children[k].style.backgroundColor}); 

     }  

} 
} 

ループの内側の2つは、その特定のパターンの開始と終了の値をトラバースしながら、ループの外側のすべてのパターンを通って横断します。私が抱えている問題は、始めの色ではなく円の終わりの色しか見ないということです。

この問題を解決するには、誰かが適切な回避策や可能性があることを知っていますか?ご意見やご協力をいただければ幸いです。

+0

問題は、移行する時間がなくなり、色を1つ設定してすぐに次の色を設定することです。次の色を設定する前に、setTimeoutを使用する必要があります。これまでの作業コードでjsfiddleを置くと、答えを公式化するのがより簡単になります。 – ariel

+1

あなたが提供したコードは、[mcve]を除くすべてです。最小限のHTMLとCSSを追加するだけで、より迅速で信頼性の高い回答を得ることができます。 –

+0

答えを見つけたら、http://stackoverflow.com/help/self-answer – ariel

答えて

1

要素にはtransition-delayの値を指定します。もちろん、このようなそれぞれのための別の1つ、

#LED1 { 
    transition-delay: 0.1s; 
} 

#LED2 { 
    transition-delay: 0.2s; 
} 

... 

#LED2 { 
    transition-delay: 1.2s; 
} 

それはそれを行う必要があります。 のCSSに直接transition-durationを設定する必要があります。JavaScriptは必要ありません。

2つのinner forループを持つ特別な理由はありますか?両方を行う人は十分ではありませんか?

+0

私は開始値と終了値のセットを持っています。私が基本的に達成したいのは、サークルに開始値を表示させ(それらは色の束である)、終了値の色に移行させることです。だから私は、それぞれの価値観ごとに1つのループが正しいアイデアだと思った。あなたは1つのループでこれをどのようにしていますか? – blazerix

+0

残念ながら、トランジションディレイは機能しませんでしたが、2番目の内部forループが実行された後も色が表示されます。 – blazerix

+0

問題は、このコードがおそらく非常に速く実行されるため、表示される効果は、それらの4つのコマンドがいずれもforループで記述された場合と同じになることです。 2番目のループには少なくともsetTimeoutを使いたいと思っています。また、あなたは 'fill'を使っていることに気付きました。それはSVGsのためではありませんか? – JHolub

-1
  1. あなたはJSループを使用して、それを設定している場合

    transition-property* 
    transition-duration* 
    transition-timing-function 
    transition-delay 
    

    遷移遅延がトランジションを連結するためにあなたを助けることができる定義する必要がトランジションのプロパティを確認してください。

  2. あなたの関数が正しい値を取得および設定されて確認してください(Chromeのdevのコンソールでクイックチェックがお手伝いします)

  3. あなたはクラスとしてコンテナによって要素を取得したいあなたは確かにいますか? divの一般的な名前であるため、関数内にいくつかの不要な要素が含まれている可能性があります。クラスをあまり一般的でない別の名前に変更することをお勧めします。

  4. なぜ2つのループですか?私はあなたが定義したように実際の遷移の前に色をリセットするためのものであると想像してくださいtransition-duration:0s; 2番目は実際の遷移でしょうか?

  5. 私が各ループで見る問題は、cssを2行に(;で区切って)設定することです。 お試しください$('#LED' + (k+1)).css('transition-duration', "" + current_pattern.children[3].children[0].value + "ms").css({fill: current_pattern.children[2].children[k].style.backgroundColor});

    そしておそらくあなたはW3Cで遷移に関するすべてのドキュメントを見つけることができ、背景色

    $('#LED' + (k+1)).css('transition-duration', "" + current_pattern.children[3].children[0].value + "ms").css('background-color', current_pattern.children[2].children[k].style.backgroundColor);

に記入変えます!

+0

私はCSSのトランジションプロパティを持っていました – blazerix

+0

私はそれを知っていると思いますので、なぜ私をdownvoteしませんか? – CamoNunez

+0

私はあなたを投票しなかった、ちょうどupvotedので、0に戻った。 – blazerix

関連する問題