Umbrella JS — лёгкая библиотека для работы с DOM, предоставляющая компактный и удобный API, схожий с jQuery. Несмотря на малый размер, она легко сочетается с внешними библиотеками анимации, такими как GSAP, Anime.js, Velocity.js или Popmotion, что позволяет создавать сложные визуальные эффекты без потери производительности.
Выбор элементов в Umbrella JS выполняется через функцию
u(). Возвращаемый объект поддерживает цепочки методов и
работу с коллекциями элементов:
const boxes = u('.box');
boxes — это коллекция, содержащая все элементы с классом
box. Любую внешнюю библиотеку анимации можно применять к
этим DOM-элементам напрямую, передавая их через индекс или используя
метод each() для итерации по коллекции.
Метод each() позволяет пройтись по всем элементам
коллекции и выполнить анимацию на каждом из них:
boxes.each((el, i) => {
gsap.to(el, { x: i * 100, duration: 1 });
});
el — текущий DOM-элемент;i — индекс элемента в коллекции.Этот подход универсален для любых библиотек, поддерживающих работу с отдельными DOM-узлами.
Некоторые библиотеки анимации умеют работать с массивами DOM-элементов. Для таких случаев можно преобразовать коллекцию Umbrella JS в обычный массив:
const boxArray = boxes.toArray();
anime({
targets: boxArray,
translateX: 250,
duration: 1000,
loop: true
});
Метод toArray() извлекает все элементы из коллекции,
позволяя передавать их напрямую внешним инструментам.
Перед анимацией часто требуется подготовить элементы, например, добавить начальные стили или классы:
boxes.addClass('ready-for-animation');
boxes.css({
opacity: 0,
transform: 'translateY(50px)'
});
После этого внешняя библиотека может плавно изменять эти свойства:
boxes.each(el => {
gsap.to(el, { opacity: 1, y: 0, duration: 1.2, ease: 'power2.out' });
});
Umbrella JS предоставляет методы для работы с событиями, которые упрощают синхронизацию анимаций с пользовательским взаимодействием:
u('#startButton').on('click', () => {
boxes.each(el => {
gsap.to(el, { rotation: 360, duration: 2 });
});
});
on() работает аналогично
addEventListener;Umbrella JS поддерживает цепочки, что позволяет совмещать подготовку элементов и их анимацию в компактном виде:
u('.card')
.css({ scale: 0 })
.addClass('anim-ready')
.each(el => {
gsap.to(el, { scale: 1, duration: 0.8, stagger: 0.2 });
});
stagger используется для последовательного появления
элементов;css(), addClass() и
each() повышает читаемость кода и сокращает количество
повторяющихся строк.Umbrella JS можно использовать не только для стандартных HTML-элементов, но и для SVG- и Canvas-объектов. Выбор и манипуляции выполняются аналогично:
u('circle').each((el, i) => {
anime({
targets: el,
r: [0, 50],
duration: 1000,
delay: i * 100,
easing: 'easeInOutQuad'
});
});
При анимации большого числа элементов важно минимизировать количество операций с DOM:
css()).each() только для анимации, оставляя выбор
и подготовку коллекции за пределами цикла.Многие современные библиотеки анимации возвращают промисы или поддерживают callback-функции. Это удобно для последовательных или цепочечных эффектов:
boxes.each(el => {
gsap.to(el, { opacity: 1, duration: 0.5 })
.then(() => gsap.to(el, { y: -50, duration: 0.5 }));
});
В каждом случае Umbrella JS выступает как удобный инструмент для выбора элементов, подготовки их состояния и организации событийной логики.
u('.selector').css(),
addClass().each() или
массив.on('event', ...).Эта схема позволяет создавать сложные, динамичные интерфейсы, сочетая простоту Umbrella JS с мощью внешних библиотек анимации.