GSAP (GreenSock Animation Platform) предоставляет широкие возможности
для создания сложной анимации в браузере, и использование
data-атрибутов позволяет управлять поведением отдельных
элементов без необходимости писать отдельные скрипты для каждого из них.
Особенно полезны атрибуты data-speed и
data-lag, которые дают возможность задавать динамическую
скорость и задержку анимации прямо в HTML.
data-speedАтрибут data-speed определяет скорость
анимации конкретного элемента относительно стандартной
длительности. Значение указывается в виде числа, где 1
соответствует базовой скорости анимации, меньшее значение замедляет
анимацию, а большее — ускоряет.
Пример использования:
<div class="box" data-speed="0.5"></div>
<div class="box" data-speed="2"></div>
В JavaScript можно считывать значение атрибута и использовать его для настройки анимации:
gsap.utils.toArray(".box").forEach(box => {
const speed = parseFloat(box.dataset.speed) || 1;
gsap.to(box, {
x: 300,
duration: 2 / speed, // делим базовую длительность на скорость
ease: "power1.inOut"
});
});
Ключевой момент: использование
data-speed позволяет создавать динамически
адаптивные анимации, где каждый элемент может двигаться с
индивидуальной скоростью без дублирования кода.
data-lagАтрибут data-lag задает задержку запуска
анимации для конкретного элемента. Значение указывается в
секундах или десятичной части секунды.
Пример HTML-разметки:
<div class="item" data-lag="0.1"></div>
<div class="item" data-lag="0.5"></div>
<div class="item" data-lag="1"></div>
Пример применения в GSAP:
gsap.utils.toArray(".item").forEach(item => {
const lag = parseFloat(item.dataset.lag) || 0;
gsap.from(item, {
y: 50,
opacity: 0,
duration: 1,
delay: lag,
ease: "power2.out"
});
});
Использование data-lag особенно эффективно для
стековых анимаций или при последовательной анимации
нескольких элементов.
data-speed и data-lagНа практике оба атрибута часто используются вместе, чтобы создать индивидуальные и синхронизированные эффекты:
<div class="card" data-speed="1.5" data-lag="0.2"></div>
<div class="card" data-speed="0.8" data-lag="0.4"></div>
<div class="card" data-speed="1" data-lag="0.6"></div>
gsap.utils.toArray(".card").forEach(card => {
const speed = parseFloat(card.dataset.speed) || 1;
const lag = parseFloat(card.dataset.lag) || 0;
gsap.from(card, {
y: 100,
opacity: 0,
duration: 2 / speed,
delay: lag,
ease: "power3.out"
});
});
Особенности и советы по использованию:
data-speed и data-lag могут быть
дробными (например, 0.3 или
1.25) для тонкой настройки анимации.|| 1 для data-speed), чтобы избежать ошибок
при отсутствии атрибута.<div class="layer" data-speed="0.5"></div>
<div class="layer" data-speed="1.2"></div>
<div class="layer" data-speed="0.8"></div>
window.addEventListener("scroll", () => {
const scrollTop = window.scrollY;
gsap.utils.toArray(".layer").forEach(layer => {
const speed = parseFloat(layer.dataset.speed) || 1;
gsap.to(layer, { y: scrollTop * speed, ease: "none", overwrite: "auto" });
});
});
Этот подход позволяет каждому слою двигаться с индивидуальной скоростью, создавая эффект глубины без сложных расчётов и отдельного кода для каждого слоя.
Использование data-speed и data-lag в
сочетании с GSAP обеспечивает гибкость, масштабируемость и
читаемость кода, делая анимацию более управляемой и визуально
привлекательной.