2017-03-02 76 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。顺便说一句,你真棒! :) –