Подтвердить что ты не робот

CSS-анимация с задержкой для каждого дочернего элемента

Я пытаюсь создать каскадный эффект, применяя анимацию к каждому дочернему элементу. Мне было интересно, есть ли лучший способ сделать это, чем это:

.myClass img:nth-child(1){
    -webkit-animation: myAnimation 0.9s linear forwards;
}
.myClass img:nth-child(2){
    -webkit-animation: myAnimation 0.9s linear 0.1s forwards;
}
.myClass img:nth-child(3){
    -webkit-animation: myAnimation 0.9s linear 0.2s forwards;
}
.myClass img:nth-child(4){
    -webkit-animation: myAnimation 0.9s linear 0.3s forwards;
}
.myClass img:nth-child(5){
    -webkit-animation: myAnimation 0.9s linear 0.4s forwards;
}

и так далее... Поэтому в основном, я хотел бы, чтобы анимация начиналась для каждого ребенка, но с задержкой. Спасибо за любой вклад!

Дополнение: Возможно, я не правильно объяснил, в чем моя забота: о том, как это сделать, независимо от того, сколько у меня детей. Как это сделать, не записывая свойства для каждого ребенка... например, когда я не знаю, сколько детей будет там.

4b9b3361

Ответ 1

Что вы хотите, это свойство animation delay.

@keyframes FadeIn { 
  0% {
    opacity: 0;
    transform: scale(.1);
  }

  85% {
    opacity: 1;
    transform: scale(1.05);
  }
  100% {
    transform: scale(1);
  }
}

.myClass img {
  float: left;
  margin: 20px;
  animation: FadeIn 1s linear;
  animation-fill-mode: both;
}

.myClass img:nth-child(1) { animation-delay: .5s }
.myClass img:nth-child(2) { animation-delay: 1s }
.myClass img:nth-child(3) { animation-delay: 1.5s }
.myClass img:nth-child(4) { animation-delay: 2s }
<div class="myClass">
    <img src="http://placehold.it/200x150" />
    <img src="http://placehold.it/200x150" />
    <img src="http://placehold.it/200x150" />
    <img src="http://placehold.it/200x150" />
</div>

Ответ 2

В будущем [надеюсь, ближе], когда attr и calc будут полностью поддерживаться, мы сможем выполнить это без JavaScript.

HTML:

<ul class="something">
    <li data-animation-offset="1.0">asdf</li>
    <li data-animation-offset="1.3">asdf</li>
    <li data-animation-offset="1.1">asdf</li>
    <li data-animation-offset="1.2">asdf</li>
</ul>

CSS

.something > li
{
    animation: myAnimation 1s ease calc(0.5s * attr(data-animation-offset number 1));
}

Это создаст эффект, при котором каждый элемент списка будет анимироваться в том, что будет выглядеть случайным образом.

Ответ 3

Если у вас много элементов (например: у меня есть разбитая таблица с числом > 1000 элементов и хотите, чтобы каждая строка была анимирована с задержкой при загрузке страницы), вы можете использовать jQuery для решения этой проблемы и избежать появления css файла в размер. Динамическое увеличение задержки анимации.

$.each($('.myClass'), function(i, el){
    $(el).css({'opacity':0});
    setTimeout(function(){
       $(el).animate({
        'opacity':1.0
       }, 450);
    },500 + ( i * 500 ));

});​

EDIT: Вот тот же код, который я настроил для использования с animate.css(установите дополнительный плагин перед использованием https://gist.github.com/1438179)

$.each($(".myClass"), function(i, el){
    $(el).css("opacity","0");
    setTimeout(function(){
       $(el).animateCSS("fadeIn","400");
    },500 + ( i * 500 ));

});

Где "fadeIn" - это тип анимации, "400" - время выполнения анимации, 500 - задержка для каждого элемента на странице для анимирования.

Ответ 4

Вы также можете использовать свойство delay-delay в CSS и использовать JS или JQuery для назначения другой задержки для каждого дочернего элемента. (Предположим, что s - начальная задержка в секундах)

$(".myClass img").each(function(index){
     $(this).css({
          'transition-delay' : s*(1+index) + 's'
     });
 });

Таким образом, у детей будут задержки перехода, такие как 1 * s, 2 * s, 3 * s..... и так далее. Теперь для создания фактического эффекта анимации просто установите необходимый переход, и дети будут анимированы в последовательности. Работает как шарм!

Ответ 5

Вот так:

.myClass img {
    -webkit-animation: myAnimation 0.9s linear forwards;
}

.myClass img:nth-child(1){
    -webkit-animation-delay: 0.1s;
}

.myClass img:nth-child(2){
    -webkit-animation-delay: 0.2s;
}

[...etc...]