2017-03-02 8 views
1

これを行う方法があるのだろうかと思います。たとえば、私はこのようなアニメーションを持っていますdemo on Codepen。 500ms後、次のキューブがアニメーション化されます。最初のアニメーション時間の1/2後に次のキューブをアニメーション化するにはどうしたらいいですか?私は.animate()でそれを作る方法を知っているが、今回はそれがの.css()であり、私はそれを行うための方法を見つけることができません。それは有り難いです!jqueryのstagger CSSアニメーション

$(function() { 
    $('button.action').on('click', function() { 
    $('.wrap .item').each(function(i) { 
     var $item = $(this); 
     setTimeout(function() { 
     $item.css({ 
      'opacity': 1, 
      'transform': 'translateX(0)' 
     }); 
     }, 500*i); 
    }); 
    }); 
}); 

次のアニメーションは、最初のアニメーション時間の1/2で開始します。最初のものの最後ではありません。

+0

あなたは* I、代わりに500 * I 250を配置しようとしましたか? – Luka

+2

なぜ 'transition-duration'をsetTimout' 500'よりも2倍長く使用しないでください。私は 'transition-duration:1s'を意味します – disstruct

+0

@Luka最初のアニメーションが終了した後ではなく、最初のアニメーションの1/2後に次のキューブの動きが欲しいという意味です。 –

答えて

1

@disstructは、CSSを変更してクールな効果を得るためにタイムアウトを短縮することを提案しています。

<div class="wrap"> 
    <div class="item"></div> 
    <div class="item"></div> 
    <div class="item"></div> 
    <div class="item"></div> 
    <div class="item"></div> 
    <div class="item"></div> 
    <div class="item"></div> 
</div> 

<button class="action">Action!</button> 

とCSS:

.item { 
    display: block; 
    margin: 5px; 
    width: 60px; 
    height: 60px; 
    background-color: #cd3455; 
    transform: translateX(100px); 
    opacity: 0.5; 
    transition: all 1s cubic-bezier(.49,-0.57,1,.99) 
} 
.action { 
    position: absolute; 
    top: 5%; 
    right: 5%; 
} 

とJS:

$(function() { 
    $('button.action').on('click', function() { 
    var duration = 250; //reduce it to have cool effects 
    $('.wrap .item').each(function(i) { 
     var $item = $(this); 
     setTimeout(function() { 
     $item.css({ 
      'opacity': 1, 
      'transform': 'translateX(0)' 
     }); 
     }, duration*i); 
    }); 
    }); 
}); 
+0

すべてはちょうど約アニメーションの時間です。 :)私はそれを誤解した!ご回答有難うございます! –

1

ここhttps://jsfiddle.net/skyr9999/rvknhq1m/

は、htmlのだ - 私はそれで遊ぶためにしたい人のための普遍的なフィドルを準備します私がそれを得たので、アイテムごとに順次アニメーションを開始したい、次のアイテムごとにそれを短くすることで、彼らはすべて同時に目的地を得ます。この例を見てください。注意:各アニメーションは前のアニメーションの1/2ではなく、1/n短く、nはアイテム数、つまり1000ms→857→714→571の7つのアイテムです。私の意見ではあまりにも短いです。

$(function() { 
 
    $('button.action').on('click', function() { 
 
    setTimeout(function() { 
 
     var items = $('.wrap .item'); 
 
     var total = items.length; 
 
     items.each(function(i) { 
 
     var initial = 1000; 
 
     var delay = initial - initial/(total + 1) * (total - i); 
 
     var speed = initial - initial/(total + 1) * i; 
 
     var item = $(this); 
 
     item.css({ 
 
      'transition-delay': delay + 'ms', 
 
      'transition-duration': speed + 'ms', 
 
      'opacity': 1, 
 
      'transform': 'translateX(0)' 
 
     }); 
 
     }); 
 
    }); 
 
    }); 
 
});
.item { 
 
    display: block; 
 
    margin: 5px; 
 
    width: 40px; 
 
    height: 40px; 
 
    background-color: #cd3455; 
 
    transform: translateX(100px); 
 
    opacity: 0.5; 
 
    transition: all .5s cubic-bezier(.49,-0.57,1,.99) 
 
} 
 
.action { 
 
    position: absolute; 
 
    top: 5%; 
 
    right: 5%; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="wrap"> 
 
    <div class="item"></div> 
 
    <div class="item"></div> 
 
    <div class="item"></div> 
 
    <div class="item"></div> 
 
    <div class="item"></div> 
 
    <div class="item"></div> 
 
    <div class="item"></div> 
 
</div> 
 

 
<button class="action">Action!</button>

+0

あなたの努力に感謝!このアニメーションでは、すべてのキューブが同時に終了します。それはまったく新しいレベルです:))ありがとうございますが、それは私が意味するものではありません。それはあなたの例よりも簡単です! @ Vasilij didiのように。あなたは素晴らしい人です! :) –

関連する問題