2017-03-02 78 views
1

我不知道是否有任何方法可以做到這一點。例如,我有一個像這樣的動畫demo on Codepen。 500毫秒後,下一個立方體將進行動畫製作。如何在第一個動畫時間的1/2後使下一個立方體變成動畫。我知道如何使它與.animate(),但這次是.css(),我找不到辦法做到這一點。我很感激!與jquery交錯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

你嘗試把250 *我,而不是500 *我? – Luka

+2

爲什麼不使用'transition-duration'比setTimout'500'長兩倍。我的意思是'transition-duration:1s' – disstruct

+0

@Luka我的意思是我希望下一個立方體在第一個動畫結束後的第一個動畫的1/2之後移動:) –

回答

1

由於@disstruct建議您可以更改CSS並減少超時以實現很酷的效果。我準備的人普遍撥弄誰想要發揮它 - https://jsfiddle.net/skyr9999/rvknhq1m/

這裏的HTML:

<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

就我所知,你想逐個開始逐個動畫,通過縮短每個下一個項目的距離,以便他們都能同時獲得目的地。看看這個例子。注意:每個動畫不是前一個的1/2,但是縮短1/n,其中n是項目的數量,即對於七個項目:1000ms-> 857-> 714-> 571,否則最新的在我看來,太短。

$(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。順便說一句,你真棒! :) –