Пружинящие (elastic) и отскакивающие (bounce) кривые смягчения относятся к нелинейным easing-функциям, имитирующим физическое поведение упругих тел. В контексте анимационной библиотеки mo.js эти типы easing применяются для придания движениям инерции, колебаний и эффекта реального столкновения с поверхностью.
Обе категории основаны на моделировании динамики системы с потерей или сохранением энергии, но отличаются характером затухания и частотой колебаний.
Elastic-поведение описывается функцией, в которой присутствует экспоненциальное затухание и синусоидальные колебания:
Bounce-модель формируется через кусочно-заданную функцию, имитирующую падение тела с последующими отскоками, где каждый последующий отскок имеет меньшую высоту.
В mo.js обе модели реализованы как готовые easing-строки, которые применяются к tween-анимациям.
Elastic easing применяется, когда требуется эффект «резинового» движения, например:
Основные варианты:
elastic.outelastic.inelastic.inoutconst tween = new mojs.Tween({
duration: 1200,
onUpdate: function (progress) {
const eased = mojs.easing.elastic.out(progress);
console.log(eased);
}
});
В mo.js easing можно применять напрямую через строковое обозначение в параметрах анимации:
const animation = new mojs.Html({
el: '.box',
scale: { 0: 1 },
duration: 1000,
easing: 'elastic.out'
});
animation.play();
Обратная логика:
Bounce easing моделирует падение объекта под действием силы тяжести с последующей потерей энергии при каждом отскоке.
Варианты:
bounce.outbounce.inbounce.inoutconst animation = new mojs.Html({
el: '.ball',
y: { -300: 0 },
duration: 1200,
easing: 'bounce.out'
});
animation.play();
Elastic и bounce часто визуально схожи, но различаются физической моделью:
Elastic:
Bounce:
mo.js использует набор предопределённых easing-функций, реализованных через математические выражения. Elastic и bounce относятся к расширенным easing-кривым, не линейно интерполирующим значения.
Упрощённо поведение можно представить так:
progress -> easingFunction(progress) -> transformedProgress
Где:
progress ∈ [0, 1]easingFunction изменяет распределение скоростиtransformedProgress используется для вычисления свойств
анимацииElastic и bounce наиболее часто применяются в классе
mojs.Html, так как он работает с DOM-элементами и позволяет
анимировать:
new mojs.Html({
el: '.modal',
scale: { 0: 1 },
opacity: { 0: 1 },
duration: 800,
easing: 'elastic.out'
}).play();
Эффект:
new mojs.Html({
el: '.notification',
y: { -200: 0 },
duration: 1000,
easing: 'bounce.out'
}).play();
Эффект:
Easing-функции в mo.js могут сочетаться с:
const step1 = new mojs.Html({
el: '.card',
scale: { 0: 1.2 },
duration: 600,
easing: 'elastic.out'
});
const step2 = new mojs.Html({
el: '.card',
scale: { 1.2: 1 },
duration: 400,
easing: 'bounce.out'
});
step1.then(step2).play();
Поведение:
Неправильное применение приводит к визуальной перегрузке:
Elastic и bounce не требуют дополнительных ресурсов по сравнению с линейными easing, однако визуально сложные колебания могут:
mo.js выполняет расчёт easing на стороне JavaScript, после чего передаёт значения в DOM через requestAnimationFrame цикл.
Elastic применяется при необходимости:
Bounce применяется при необходимости:
Разделение этих моделей повышает предсказуемость интерфейса и снижает визуальный шум.