Кастомные CSS-анимации

Библиотека Toastify позволяет создавать уведомления с плавной анимацией, которые могут быть полностью кастомизированы с помощью CSS. По умолчанию Toastify использует встроенные стили для появления и исчезновения тостов, однако часто требуется индивидуальный стиль анимации, соответствующий дизайну проекта.

Ключевой элемент для управления анимацией — свойства className, style и onClick. Они дают полный контроль над визуальным отображением и поведением уведомления.


Подключение кастомного CSS

Для начала необходимо подключить собственный CSS-файл или добавить стили в существующий. Важнейшие свойства, которые используются для анимации, включают:

  • opacity — управление прозрачностью уведомления.
  • transform — масштабирование, сдвиг или вращение тоста.
  • transition — плавное изменение свойств во времени.

Пример базового CSS для анимации появления и скрытия тоста:

.toastify-slide-in {
  opacity: 0;
  transform: translateY(-20px);
  transition: all 0.5s ease;
}

.toastify-slide-in.show {
  opacity: 1;
  transform: translateY(0);
}

.toastify-slide-in.hide {
  opacity: 0;
  transform: translateY(-20px);
}

Здесь .show активируется при рендеринге тоста, а .hide — при его скрытии.


Использование кастомного класса в JavaScript

При создании уведомления через Toastify можно указать кастомный CSS-класс через опцию className:

Toastify({
  text: "Уведомление с кастомной анимацией",
  duration: 3000,
  className: "toastify-slide-in",
  close: true
}).showToast();

Важно: анимация запускается при появлении элемента в DOM. Для скрытия используется комбинация событий onClick или callback по окончании времени жизни тоста.


Ключевой метод: onShow и onHide

Для более сложных анимаций полезно использовать колбэки onShow и onHide:

Toastify({
  text: "Сложная анимация",
  duration: 4000,
  className: "toastify-slide-in",
  close: true,
  onShow: function(toast){
    toast.classList.add("show");
  },
  onHide: function(toast){
    toast.classList.add("hide");
  }
}).showToast();

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


Примеры продвинутых эффектов

Плавное масштабирование (zoom-in/out)

.toastify-zoom {
  opacity: 0;
  transform: scale(0.8);
  transition: all 0.4s ease;
}

.toastify-zoom.show {
  opacity: 1;
  transform: scale(1);
}

.toastify-zoom.hide {
  opacity: 0;
  transform: scale(0.8);
}

Скользящее уведомление слева

.toastify-slide-left {
  opacity: 0;
  transform: translateX(-100%);
  transition: all 0.5s cubic-bezier(0.68, -0.55, 0.27, 1.55);
}

.toastify-slide-left.show {
  opacity: 1;
  transform: translateX(0);
}

.toastify-slide-left.hide {
  opacity: 0;
  transform: translateX(-100%);
}

Эти стили создают эффект “вылетающего” уведомления с кастомной кривой ускорения.


Анимация с использованием keyframes

Для сложных последовательных эффектов лучше использовать @keyframes:

@keyframes toast-fade-in {
  0% { opacity: 0; transform: translateY(-30px); }
  100% { opacity: 1; transform: translateY(0); }
}

@keyframes toast-fade-out {
  0% { opacity: 1; transform: translateY(0); }
  100% { opacity: 0; transform: translateY(-30px); }
}

.toastify-keyframe {
  animation: toast-fade-in 0.5s forwards;
}

.toastify-keyframe.hide {
  animation: toast-fade-out 0.5s forwards;
}

В JavaScript добавляется переключение классов для управления последовательностью анимаций.


Советы по оптимизации

  • Для плавности избегать одновременного изменения свойств top/left и opacity; лучше использовать transform + opacity.
  • Использовать will-change: transform, opacity для повышения производительности анимации в современных браузерах.
  • Минимизировать использование тяжелых эффектов, таких как box-shadow с анимацией, чтобы не нагружать рендеринг.
  • При множественных уведомлениях стоит использовать разные классы с уникальными задержками через animation-delay.

Интеграция с динамическими событиями

Кастомные анимации можно сочетать с действиями пользователя, например:

Toastify({
  text: "Нажмите для закрытия",
  duration: -1, // тост не исчезает автоматически
  className: "toastify-slide-in",
  close: true,
  onClick: function(toast){
    toast.classList.add("hide");
    setTimeout(() => toast.remove(), 500);
  }
}).showToast();

Здесь уведомление исчезает по клику с плавной анимацией, а setTimeout гарантирует удаление элемента после завершения анимации.


Кастомные CSS-анимации в Toastify дают полный контроль над визуальной динамикой уведомлений, позволяя создавать уникальные и плавные эффекты, соответствующие любому стилю интерфейса. Их гибкость достигается комбинацией классов, keyframes и колбэков для событий показа и скрытия.