CSS анімація в середині циклу

2 хв. читання

Скажімо, у вас анімація, яка анімує елемент по всій ширині екрану. Від лівого до правого краю. Ви можете застосувати її до кількох елементів. Але, Ви не хочете, щоб всі елементи починали з однієї позиції.

Ви можете змінити animation-delay так, що анімування кожного елемента починалось в різний час, але місце початку анімації все-рівно буде однакове.

Проте, є вихід.

Фокус в тому, щоб використовувати негативне значення animation-delay. Це створить відчуття, ніби то частина анімації вже відбулась.

Маємо три елемента:

    <div class="thing thing-1"></div>
    <div class="thing thing-2"></div>
    <div class="thing thing-3"></div>

Вони 300px в ширину. Ми збираємося анімувати їх по всьому екрану:

    @keyframes moveAcross {
      0% {
        left: -300px;
      }
      100% {
        left: 100%;
      }
    }

Всі вони використовують цю анімацію, що означає, що всі вони будуть починати з одного місця:

    .thing {
      width: 300px;
      position: absolute;
      top: 0;
      left: 0;
      animation: moveAcross 10s linear infinite;
    }

Застосовуємо негативні затримки:, щоб змінити їх стартову позицію:

    .thing-1 {
      animation-delay: -1s;
    }
    .thing-2 {
      animation-delay: -2s;
    }
    .thing-3 {
      animation-delay: -3s;
    }

Ще одна маленька хитрість: зупиніть анімацію для більш комфортного процесу налаштування (ви будете, по суті, побачивши перший кадр):

    .car {
      ...
      animation-play-state: paused;
    }

Краще всього, використовувати цей спосіб для повільних анімацій.

Різна тривалість:

Помітили помилку? Повідомте автору, для цього достатньо виділити текст з помилкою та натиснути Ctrl+Enter
Codeguida 5.9K
Приєднався: 8 місяців тому
Коментарі (0)

    Ще немає коментарів

Щоб залишити коментар необхідно авторизуватися.

Вхід / Реєстрація