Как воспроизводить и приостанавливать анимацию CSS с помощью пользовательских свойств CSS?

Опубликовано: 23 Февраля, 2023

В этой статье мы увидим, как управлять анимацией CSS с помощью пользовательских свойств, а также узнаем их реализацию на примерах.

Анимации CSS — это автоматические переходы, которые можно выполнять на веб-странице, что позволяет элементу переходить из одного стиля в другой. Пользовательские свойства CSS — это переменные, определенные разработчиками CSS, которые содержат определенные значения для повторного использования в документе. Они устанавливаются с использованием нотации пользовательских свойств, и доступ к ним осуществляется с помощью функции var() .

Например, –main-by-color – это настраиваемое свойство, которое распространяется на всю веб-страницу ( :root ) и доступно как var(–main-bg-color, red), где второй аргумент является значением по умолчанию.

:root {
 --main-bg-color : green;
}
div {
background-color : var(--main-bg-color,red)
}

Добавление CSS-анимации с использованием пользовательских свойств. Для первоначального воспроизведения CSS-анимации нам нужно добавить анимацию с помощью правила @keyframes . Но мы добавим анимацию с настраиваемыми свойствами. Анимация начинает воспроизводиться, как только она встроена в элемент

Мы поймем вышеприведенные концепции на примерах.

Пример 1. В приведенном ниже примере кода мы создадим простую анимацию слайда. мы добавляем --animn , --animdur , --animps в качестве настраиваемых свойств для animation-name , animation-duration , animation-play-state соответственно. бесконечен как количество итераций, 3 с как продолжительность и чередуется как направление анимации.

HTML




<!DOCTYPE html>
<html>
  
<head>
    <title>
        How to Play and Pause CSS Animations 
        using CSS Custom Properties ?
    </title>
    <style>
        .block{
         background-color: tomato;
          padding : 10px;
          width : 200px;
          text-align: center;
          --anim : slide; 
          --animdur : 3s;
          --animps : running;
         animation: var(--animn, slide) 
                       var(--animdur, 0s) 0s infinite alternate 
                       var(--animps,running);
        }
         @keyframes slide {
           from { margin-left: 0%; }
           to { margin-left: calc(100% - 250px); }
          }
          
    </style>
</head>
  
<body>
    <h1 style="color:green">GeeksForGeeks</h1>
    <h3>How to Play and Pause CSS Animations 
        using CSS Custom Properties ?
    </h3>
    <div class="block">I Am Moving</div>
</body>
  
</html>

Вывод: поле цвета помидора скользит после того, как мы добавили анимацию, как показано в коде выше. Теперь вы можете переключать ту же анимацию, используя пользовательские свойства и псевдокласс :checked.

Переключение (воспроизведение/пауза) анимации CSS: мы можем переключать анимацию двумя способами:

  • Изменяя продолжительность анимации
  • Используя анимацию-воспроизведение-состояние

Мы поймем оба подхода к последовательному переключению анимации CSS и узнаем их реализацию на примерах.

Изменяя продолжительность анимации: в этом методе вы просто меняете значение анимации на ноль, чтобы приостановить, и некоторое положительное значение для воспроизведения.

Подход: для изменения продолжительности анимации будет использоваться следующий подход:

  • Создайте элемент <div> и стилизуйте его с помощью CSS
  • Выберите <div> и добавьте свойство анимации с длительностью 0 с через пользовательскую переменную (animation-duration).
  • Создайте анимацию, как показано в примере ниже.
  • Добавьте переключатель в документ
  • Добавьте псевдокласс :checked к переключателю и добавьте свойство, в котором вы меняете пользовательскую переменную с 0 на некоторое положительное значение.
  • Теперь вы можете переключать анимацию с помощью переключателя.

Пример 2: В этом примере (аналогично приведенному выше) мы использовали псевдокласс :checked для переключения анимации. Кроме того, мы меняем параметр –animdur с 0 на 3 , чтобы переключать скольжение элемента.

HTML




<!DOCTYPE html>
<html>
  
<head>
    <title>
        How to Play and Pause CSS Animations 
        using CSS Custom Properties ?
    </title>
    <style>
        input[type]:checked ~ .block{
          --animdur : 3s;
        
         .block{
          background-color: tomato;
           padding : 10px;
           width : 200px;
           text-align: center;
           --anim : slide; 
           --animdur : 0s;
          animation: var(--animn, slide) 
                     var(--animdur, 0s) 0s infinite alternate;
         }
         @keyframes slide {
            from { margin-left: 0%; }
            to { margin-left: calc(100% - 250px); }
        }
    </style>
</head>
  
<body>
    <h1 style="color:green">GeeksForGeeks</h1>
    <h3>
          How to Play and Pause CSS Animations 
        using CSS Custom Properties ?
    </h3>
    <input type="checkbox" />
    <div class="block">I Am Moving</div>
</body>
  
</html>

Вывод: этот метод не сохраняет положение движущегося элемента, используйте второй метод для фактической анимации.

С помощью animation-play-state: вы можете использовать свойство CSS animation-play-state для переключения между состояниями анимации.

Подход : следующий подход будет использоваться для состояния воспроизведения анимации:

  • Создайте элемент <div/> и стилизуйте его с помощью CSS
  • Выберите <div/> и добавьте свойство анимации с состоянием паузы через пользовательскую переменную (анимация-воспроизведение-состояние).
  • Создайте анимацию, как показано в примере ниже.
  • Добавьте переключатель в документ
  • Добавьте псевдокласс :checked к переключателю и с его помощью добавьте свойство, в котором вы меняете пользовательскую переменную с приостановленной на работающую.
  • Теперь вы можете переключать анимацию с помощью переключателя.

Пример 3: В этом примере (таком же, как и выше) мы использовали псевдокласс :checked для переключения анимации. –animps — это важное пользовательское свойство, которое принимает два значения [paused/running], которые используются для переключения анимации. При установке флажка состояние воспроизведения анимации изменяется на «Выполняется».

HTML




<!DOCTYPE html>
<html>
  
<head>
    <title>
        How to Play and Pause CSS Animations
        using CSS Custom Properties ?
    </title>
    <style>
        input[type]:checked ~ .block{
          --animps : running;
        
         .block{
          background-color: tomato;
           padding : 10px;
           width : 200px;
           text-align: center;
           --anim : slide; 
           --animps : paused;
          animation: var(--animn, slide) 3s 0s infinite alternate 
                     var(--animps,paused);
         }
         @keyframes slide {
            from { margin-left: 0%; }
            to { margin-left: calc(100% - 250px); }
        }        
    </style>
</head>
  
<body>
    <h1 style="color:green">GeeksForGeeks</h1>
    <h3>
        How to Play and Pause CSS Animations 
        using CSS Custom Properties ?
    </h3>
    <input type="checkbox" />
    <div class="block">I Am Moving</div>
</body>
  
</html>

Выход: