Плавность прокрутки в библиотеке Smooth Scroll достигается за счёт использования функций easing — математических функций, которые определяют скорость изменения координат во времени. Функции easing позволяют создавать визуально естественное движение страницы, делая переходы мягкими и комфортными для глаз.
Smooth Scroll поддерживает несколько основных видов easing, каждый из которых отвечает за различное ощущение движения:
Эти функции реализованы в виде математических формул, которые принимают текущее время анимации, начальное значение, изменение значения и продолжительность, возвращая координату для текущего кадра.
В Smooth Scroll функция easing задаётся через объект конфигурации при инициализации скрипта:
const scroll = new SmoothScroll('a[href*="#"]', {
speed: 800,
easing: 'easeInOutCubic'
});
Пояснение параметров:
speed — время анимации в миллисекундах.easing — название функции плавности.Благодаря этому механизм позволяет легко менять ощущение движения без изменения остального кода.
Smooth Scroll позволяет создавать собственные функции easing. Для этого используется функция, которая принимает четыре аргумента:
t – текущее время анимации (от 0 до 1).b – начальное значение.c – изменение значения (разница между конечным и
начальным положением).d – длительность анимации.Пример кастомной функции:
function customEasing(t, b, c, d) {
t /= d / 2;
if (t < 1) return c / 2 * t * t + b;
t--;
return -c / 2 * (t * (t - 2) - 1) + b;
}
const scroll = new SmoothScroll('a[href*="#"]', {
speed: 1000,
easing: customEasing
});
Эта функция создаёт эффект плавного ускорения и замедления, схожий с
easeInOutQuad, но полностью настраивается вручную.
Выбор функции easing напрямую влияет на UX: слишком резкое движение раздражает пользователя, а слишком медленное – создаёт ощущение тормозов.
Функция easing тесно связана с другими настройками:
offset — смещение от целевого элемента. Плавность
корректируется с учётом этого значения.updateURL — изменение URL при прокрутке не влияет на
физику easing, но визуальное восприятие связано с длиной анимации.speed — длительность анимации и функция easing вместе
создают финальный эффект; высокая скорость с easeOut
выглядит быстрее, чем та же скорость с easeInOut.easeInOutCubic или easeInOutQuad.easeOutCubic для эффекта плавного торможения.Понимание и правильный выбор функции easing позволяет создавать интерфейсы с профессиональной, комфортной для пользователя анимацией, избегая резких скачков и визуального дискомфорта.