JS властивість CSSStyleDeclaration.animation


Загальний опис

animation – це властивість JavaScript, яка дозволяє задавати або отримувати параметри анімації CSS для HTML-елементів. Вона є потужним інструментом для веб-розробників, які прагнуть створювати динамічні та привабливі інтерфейси користувача без необхідності використання зовнішніх бібліотек для анімацій. Основна суть цієї властивості полягає в тому, що вона забезпечує можливість контролю над CSS-анімаціями за допомогою JavaScript-коду. Це дозволяє легко маніпулювати параметрами анімацій, такими як тривалість, затримка, кількість повторень, напрямок анімації та інші.

Основний приклад

Найпростішим випадком використання властивості animation є встановлення анімації для елемента. Розглянемо наступний приклад:

const element = document.getElementById("myElement");
element.style.animation = "exampleAnimation 2s infinite";

У цьому прикладі ми знаходимо елемент за його id та встановлюємо йому анімацію з ім'ям exampleAnimation, яка триватиме 2 секунди та повторюватиметься нескінченно.

Опис параметрів

Властивість animation може приймати кілька параметрів, що задаються через пробіл:

  • Назва анімації (animation-name)
  • Тривалість (animation-duration)
  • Функція таймінгу (animation-timing-function)
  • Затримка (animation-delay)
  • Кількість повторень (animation-iteration-count)
  • Напрямок анімації (animation-direction)
  • Стан заповнення (animation-fill-mode)
  • Чи працює анімація (animation-play-state)

Розглянемо більш складний приклад з використанням декількох параметрів:

const element = document.getElementById("myElement");
element.style.animation = "exampleAnimation 2s ease-in-out 1s 3 reverse both paused";

У цьому випадку анімація exampleAnimation буде мати такі характеристики:

  • Тривалість: 2 секунди
  • Функція таймінгу: ease-in-out
  • Затримка: 1 секунда
  • Кількість повторень: 3 рази
  • Напрямок: reverse
  • Стан заповнення: both
  • Статус: paused

Застосування складніших анімацій

Властивість animation також дозволяє задавати кілька анімацій одночасно. Це досягається шляхом розділення окремих анімацій комою:

const element = document.getElementById("myElement");
element.style.animation = "animation1 2s, animation2 3s 1s both";

У цьому прикладі елементу одночасно застосовуються дві анімації:

  1. animation1 з тривалістю 2 секунди.
  2. animation2 з тривалістю 3 секунди, затримкою 1 секунда та станом заповнення both.

Маніпулювання анімаціями за допомогою JavaScript

JavaScript дозволяє не лише встановлювати анімації, але й динамічно змінювати їх параметри. Наприклад, можна змінити тривалість анімації в процесі виконання:

const element = document.getElementById("myElement");
element.style.animationDuration = "5s";

Цей код змінює тривалість поточної анімації елемента на 5 секунд.

Використання ключових кадрів

Щоб анімація працювала, необхідно визначити її ключові кадри в CSS. Наприклад:

@keyframes exampleAnimation {
  from { opacity: 0; }
  to { opacity: 1; }
}

Цей код визначає анімацію exampleAnimation, яка змінює прозорість елемента з 0 до 1.

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

автор: Bond

Порада

Для керування анімацією під час її виконання використовуйте методи element.animate() та Animation.prototype. Наприклад, const player = element.animate(keyframes, options) повертає об'єкт Animation, який дозволяє керувати анімацією за допомогою методів, таких як player.pause(), player.reverse() або player.updatePlaybackRate(2).

автор: Bond
Порада

Використовуйте властивість animationPlayState для програмного керування станом анімації. Значення running запускає анімацію, а paused - призупиняє її. Це корисно для створення інтерактивних анімацій, що реагують на дії користувача. Наприклад, element.style.animationPlayState = 'paused' зупиняє анімацію на поточному кадрі.

автор: Bond
Порада

Для плавного переходу між анімаціями використовуйте властивість animationTimingFunction. Вона дозволяє визначити часову функцію, яка керує швидкістю анімації на різних етапах її виконання. Наприклад, animation: myAnimation 2s ease-in-out створює плавний розгін і гальмування анімації на початку та в кінці.

автор: Bond

Синтаксис

element.style.animation

Переглядачі

Підтримка: стаціонарні переглядачі
Переглядач Google Chrome Mozilla Firefox Apple Safari Opera Microsoft EDGE Microsoft Internet Explorer
43 16 9 30 12 10
Підтримка: мобільні переглядачі
Переглядач Mobile Google Android Mobile Google Chrome Mobile Mozilla Firefox Mobile Apple Safari
43 43 16 9

Приклади

+ запропонувати свій приклад у пісочниці

У цьому прикладі ми маємо елемент div з класом animated-element, який буде анімуватися. Користувач може вибрати одну з трьох анімацій за допомогою випадаючого списку animationSelect: "Анімація слайду" (slideIn), "Анімація появи" (fadeIn) або "Анімація відскоку" (bounce).

При натисканні на кнопку "Запустити анімацію" (playAnimation) ми створюємо нову анімацію за допомогою методу element.animate() і застосовуємо вибрану анімацію до елемента за допомогою властивості animation. Анімація буде циклічно повторюватися нескінченну кількість разів.

Кнопка "Призупинити анімацію" (pauseAnimation) дозволяє зупинити поточну анімацію за допомогою методу animation.cancel() і скидає властивість animation елемента до 'none'.

Якщо користувач змінює вибір анімації у випадаючому списку animationSelect, поточна анімація скасовується, і нова анімація застосовується до елемента.

Цей приклад демонструє, як можна використовувати властивість animation для додавання різних анімацій до елементів на веб-сторінці та керування ними програмно за допомогою JavaScript. Користувач може взаємодіяти з прикладом, вибираючи анімацію зі списку, запускаючи та зупиняючи її за допомогою кнопок.

HTML

<header>
  <h2 class="title">animation</h2>
  <p class="description">Застосовує анімацію, визначену в CSS, до елемента.</p>
</header>
<main>
  <div class="result">
    <div class="animated-element">Це анімований елемент</div>
    <div class="controls">
      <button id="playAnimation">Запустити анімацію</button>
      <button id="pauseAnimation">Призупинити анімацію</button>
      <select id="animationSelect">
        <option value="slideIn">Анімація слайду</option>
        <option value="fadeIn">Анімація появи</option>
        <option value="bounce">Анімація відскоку</option>
      </select>
    </div>
  </div>
</main>

CSS

body {
  font-size: 16px;
  line-height: 1.5;
  font-family: monospace;
}

header {
  background-color: #f1f1f1;
  margin-bottom: 25px;
  padding: 15px;
  -webkit-box-shadow: 0px 0px 3px 0px rgba(118, 118, 118, 1);
  -moz-box-shadow: 0px 0px 3px 0px rgba(118, 118, 118, 1);
  box-shadow: 0px 0px 3px 0px rgba(118, 118, 118, 1);
}

header h2.title {
  padding-bottom: 15px;
  border-bottom: 1px solid #999;
}

header p.description {
  font-style: italic;
  color: #222;
}

.result {
  background-color: #f8f8f8;
  padding: 15px;
  -webkit-box-shadow: 0px 0px 3px 0px rgba(118, 118, 118, 1);
  -moz-box-shadow: 0px 0px 3px 0px rgba(118, 118, 118, 1);
  box-shadow: 0px 0px 3px 0px rgba(118, 118, 118, 1);
}

.animated-element {
  width: 200px;
  height: 200px;
  background-color: lightgray;
  margin-bottom: 20px;
}

@keyframes slideIn {
  0% {
    transform: translateX(-100%);
  }
  100% {
    transform: translateX(0);
  }
}

@keyframes fadeIn {
  0% {
    opacity: 0;
  }
  100% {
    opacity: 1;
  }
}

@keyframes bounce {
  0% {
    transform: translateY(0);
  }
  50% {
    transform: translateY(-20px);
  }
  100% {
    transform: translateY(0);
  }
}

JS

const animatedElement = document.querySelector('.animated-element');
const playButton = document.getElementById('playAnimation');
const pauseButton = document.getElementById('pauseAnimation');
const animationSelect = document.getElementById('animationSelect');

let animation;

playButton.addEventListener('click', () => {
  const animationName = animationSelect.value;
  animation = animatedElement.animate(
  [
  { transform: 'none' },
  { transform: 'none' }],

  {
    duration: 1000,
    iterations: Infinity,
    easing: 'ease-in-out',
    direction: 'alternate' });


  animatedElement.style.animation = `${animationName} 1s infinite`;
});

pauseButton.addEventListener('click', () => {
  if (animation) {
    animation.cancel();
    animatedElement.style.animation = 'none';
  }
});

animationSelect.addEventListener('change', () => {
  if (animation) {
    animation.cancel();
  }
  const animationName = animationSelect.value;
  animatedElement.style.animation = `${animationName} 1s infinite`;
});
//# sourceURL=pen.js
автор: Bond

У цьому прикладі ми використовуємо властивість animation для додавання анімації до елемента при натисканні на кнопку. Властивість animation дозволяє застосувати стиль анімації, визначений за допомогою CSS, до елемента через JavaScript.

<button id="animateButton">Анімувати елемент</button>
<div id="animatedElement">Це анімований елемент</div>

<script>
const animatedElement = document.getElementById('animatedElement');
const animateButton = document.getElementById('animateButton');

animateButton.addEventListener('click', () => {
  animatedElement.style.animation = 'slideIn 1s ease-out';
});
</script>

<style>
@keyframes slideIn {
  0% {
    transform: translateX(-100%);
  }
  100% {
    transform: translateX(0);
  }
}
</style>
автор: Bond

У цьому складнішому прикладі ми використовуємо властивість animation для створення циклічної анімації, яку можна зупинити та відновити за допомогою JavaScript.

<button id="toggleAnimation">Перемкнути анімацію</button>
<div id="animatedElement">Це анімований елемент</div>

<script>
const animatedElement = document.getElementById('animatedElement');
const toggleButton = document.getElementById('toggleAnimation');
let isAnimationRunning = false;

toggleButton.addEventListener('click', () => {
  if (isAnimationRunning) {
    animatedElement.style.animationPlayState = 'paused';
    isAnimationRunning = false;
  } else {
    animatedElement.style.animation = 'pulse 2s infinite';
    animatedElement.style.animationPlayState = 'running';
    isAnimationRunning = true;
  }
});
</script>

<style>
@keyframes pulse {
  0% {
    transform: scale(1);
  }
  50% {
    transform: scale(1.2);
  }
  100% {
    transform: scale(1);
  }
}
</style>
автор: Bond

Коментарі

Коментарів ще немає — будьте першим!

Відповідь для

Як форматувати текст?
Пишемо Виходить
**важливо**
*акцент*
~~застаріле~~
Виділення в тексті. Те саме роблять кнопки панелі, що спливає над виділеним.
## Як працює каскад
### Порядок оголошень
Заголовки всередині тексту. Найбільший не потрібен — він у сторінки вже є.
[[css/property/color]] Посилання на сторінку довідника. Наберіть [[ — поле веде сходинками (розділ → тип → сторінка), а хибний ключ підкреслить хвилею.
[[!sandbox/S0oh1hBm]] Живий приклад окремим рядком — саме вікно результату. Той самий ключ зі знаком !: наберіть [[! і дійдіть сходинками до потрібної сторінки, список покаже її приклади.
[MDN](https://developer.mozilla.org) Посилання на чужий сайт.
![Схема каскаду](https://site.com/схема.png) Картинка. Опис обов'язковий: його читають пошуковик і незрячі.
Задайте `display: grid` контейнеру Код усередині речення.
```css
.card { display: grid }
```
Код блоком. Мова після трьох лапок вмикає підсвітку.
- Походження
1. Походження
Перелік: маркований і нумерований.
- [ ] дописати приклади
- [x] перевірити в Firefox
Перелік завдань із галочками. Пробіл у порожніх дужках обов'язковий.
> Порядок важить лише за рівної ваги. Цитата на всю ширину абзацу.
Специфічність
: вага селектора; більша перемагає
Список означень: термін, а під ним пояснення з відступом. Пробіл після двокрапки обов'язковий.
Каскад має три критерії[^1]
[^1]: Походження, специфічність, порядок.
Виноска: номер у тексті, примітка внизу сторінки. Без згадки [^1] у тексті примітка не з'явиться.
Відповідь: ||сорок два|| Ховає те, що між рисками: читач бачить на цьому місці розмиту пляму, а решта речення лишається звичайною. Клац — і текст відкрито.
|| Показати рішення
Задайте контейнеру `display: grid`.
||
Ховає цілі абзаци. На сторінці видно лише підпис із першого рядка («Показати рішення»), решта розгортається клацанням по ньому. Закривні риски — окремим рядком.
Порожній рядок Новий абзац. Щоб перенести рядок усередині абзацу, поставте \ в його кінці.

Увійдіть — коментар з'явиться одразу, без капчі й очікування перевірки.

Правка
Зворотний зв'язок
Вхід