Метод findShapeIndex является специализированным
инструментом для работы с анимациями, основанными на SVG-пути, в
библиотеке GSAP. Он позволяет определить индекс конкретной точки на
кривой или контуре, который будет использоваться в качестве
начальной точки анимации. Это особенно важно при
создании сложных морфинговых анимаций или при необходимости
синхронизации движения объектов вдоль пути с определённой позиции.
findShapeIndexФункция принимает следующие параметры:
findShapeIndex(path, position)
<path>).Возвращает целочисленный индекс точки, наиболее
близкой к заданной позиции. Этот индекс может использоваться в методах
morphSVG, motionPath или кастомных функциях
для точного определения стартовой точки анимации.
import { gsap } from "gsap";
import { MotionPathPlugin } from "gsap/MotionPathPlugin";
gsap.registerPlugin(MotionPathPlugin);
const path = document.querySelector("#myPath");
const index = MotionPathPlugin.findShapeIndex(path, 0.25); // 25% вдоль пути
gsap.to("#myObject", {
duration: 3,
motionPath: {
path: path,
start: index / path.getTotalLength(),
align: path,
alignOrigin: [0.5, 0.5]
}
});
В этом примере объект начинает движение не с начала пути, а с точки,
определённой функцией findShapeIndex. Значение
0.25 указывает, что стартовая точка находится примерно на
четверти пути. Разделение длины пути на индексы позволяет точно
позиционировать объект без ручного подсчёта координат.
При работе с кривыми Безье или многоугольными контурами важно
учитывать, что разделение пути на равные сегменты может быть
неравномерным из-за кривизны. Функция
findShapeIndex вычисляет индекс на основе реальной длины
сегментов, что обеспечивает точность:
const curvedIndex = MotionPathPlugin.findShapeIndex(path, 0.5);
Для анимаций типа morphSVG часто необходимо
выровнять начальные точки двух разных форм. findShapeIndex
используется для подбора соответствующего индекса, чтобы переход
выглядел плавным:
const startIndex = MorphSVGPlugin.findShapeIndex(shapeA, 0.0);
const endIndex = MorphSVGPlugin.findShapeIndex(shapeB, 0.0);
gsap.to("#shapeA", {
duration: 2,
morphSVG: {
shape: "#shapeB",
shapeIndex: startIndex // синхронизация начальных точек
}
});
Использование индексов исключает визуальные “прыжки” формы, когда начальная точка одной формы не совпадает с начальной точкой другой.
Кэширование индексов При многократных анимациях по одному пути вычисление индекса можно делать один раз и сохранять его в переменной. Это уменьшает нагрузку на рендеринг и улучшает производительность.
Использование дробных значений Для плавного
движения вдоль пути допустимо использовать дробные позиции (например,
0.33, 0.67) для более точного контроля
начальной точки.
Комбинация с другими методами MotionPathPlugin
Индекс удобно применять вместе с align и
alignOrigin, чтобы объект корректно ориентировался
относительно направления пути и его кривизны.
gsap.registerPlugin().Использование findShapeIndex позволяет точно управлять
стартовой точкой анимации на сложных путях, обеспечивает плавный морфинг
форм и устраняет расхождения между визуальными и вычисленными позициями
объектов. Этот инструмент незаменим при создании интерактивных
интерфейсов и сложных motion-дизайнов, где каждая точка пути имеет
значение.