ThrowProps — это мощный плагин для библиотеки GSAP, предназначенный для создания естественных анимаций с эффектом инерции и «бросков». Он позволяет объектам продолжать движение после завершения пользовательского взаимодействия, создавая реалистичное ощущение физики без сложных расчетов вручную.
Основной принцип работы ThrowProps заключается в том, чтобы вычислить скорость объекта на момент завершения взаимодействия и продолжить движение с постепенным замедлением до остановки. Это особенно полезно для интерфейсов с перетаскиванием элементов, каруселей, скроллинга и других интерактивных анимаций.
ThrowProps является плагином GSAP, поэтому перед использованием необходимо подключить как GSAP, так и плагин:
import { gsap } from "gsap";
import { ThrowPropsPlugin } from "gsap/ThrowPropsPlugin";
gsap.registerPlugin(ThrowPropsPlugin);
После регистрации плагина можно создавать анимации с «бросками».
1. throwProps()
Метод throwProps используется для запуска анимации с
инерцией. Он принимает объект с параметрами:
gsap.to(element, {
duration: 2,
throwProps: {
x: { velocity: 500, resistance: 200 },
y: { velocity: 300 }
}
});
x,
y) или для любых свойств, которые поддерживают числовое
изменение.2. track() и getVelocity()
Метод track() используется для отслеживания свойств
объекта во время взаимодействия (например, при перетаскивании мышью или
касанием):
ThrowPropsPlugin.track(element, "x,y");
После отслеживания можно получить текущую скорость объекта через
getVelocity():
let velocityX = ThrowPropsPlugin.getVelocity(element, "x");
Это позволяет динамически запускать анимацию с инерцией на основе пользовательского взаимодействия.
Чаще всего ThrowProps используется совместно с плагином Draggable для создания плавного и реалистичного перетаскивания элементов:
import { Draggable } from "gsap/Draggable";
Draggable.create(element, {
type: "x,y",
throwProps: true
});
Ключевой момент: установка throwProps: true позволяет
Draggable автоматически применять плагин ThrowProps и рассчитывать
инерцию при отпускании объекта. Можно также задавать параметры
сопротивления и ограничения движения:
Draggable.create(element, {
type: "x,y",
edgeResistance: 0.8,
throwProps: {
resistance: 300,
maxVelocity: 1000
}
});
ThrowProps поддерживает ограничение движения объекта в определённых пределах:
gsap.to(element, {
duration: 2,
throwProps: {
x: { velocity: 600, resistance: 200, max: 500, min: 0 }
}
});
ThrowProps можно совмещать с классическими GSAP-анимациями. Например, сначала элемент анимируется к определенной позиции, а затем продолжает движение с инерцией:
gsap.to(element, { x: 300, duration: 1 });
gsap.to(element, {
throwProps: {
x: { velocity: 500, resistance: 250 }
}
});
Такой подход позволяет создавать сложные цепочки анимаций с естественными эффектами физики.
ThrowPropsPlugin.track() для тех свойств, которые будут
подвержены инерции. Без отслеживания начальная скорость не будет
корректно вычислена.resistance позволяет управлять длительностью замедления.
Малое значение создаёт долгую инерцию, большое — быстрое
торможение.Draggable + ThrowProps даёт наилучшие результаты.ThrowProps предоставляет гибкий инструмент для создания анимаций с естественным движением, максимально приближенным к физической реальности. Его возможности позволяют легко управлять скоростью, сопротивлением и ограничениями, создавая интерфейсы, где элементы двигаются плавно и предсказуемо, реагируя на действия пользователя.