Библиотека Stickybits предназначена для упрощения работы с “липкими” элементами на странице, однако с течением времени её API претерпело ряд изменений, влияющих на интеграцию и поведение компонентов. Ниже подробно рассматриваются ключевые изменения между основными версиями.
В ранних версиях Stickybits (до версии 3.x) инициализация выполнялась через простую функцию с передачей селектора и объектом опций:
var sticky = new Stickybits('.element', { useStickyClasses: true });
Ключевые особенности старого API:
useStickyClasses: добавление CSS-классов
.is-sticky и .is-stuck.position: sticky в
браузере.update() не был частью публичного API, для
обновления положения приходилось переинициализировать объект.В версии 3.x и выше произошли следующие изменения:
stickyBitStickyOffset для точной
настройки смещения липкого элемента.useStickyClasses остался, но появилась возможность
управлять индивидуальными классами через
stickyClass и stuckClass.Пример нового API:
var sticky = Stickybits('.element', {
stickyBitStickyOffset: 20,
stickyClass: 'custom-sticky',
stuckClass: 'custom-stuck'
});
Ранее доступные методы:
cleanup(): удалял все добавленные классы и слушатели
событий.update(): отсутствовал или был доступен только через
внутренние вызовы.Изменения в новых версиях:
update(): стал официальным методом API для пересчёта
позиции при изменении DOM.destroy(): аналог cleanup(), но более
надёжно снимает все обработчики и возвращает элемент в исходное
состояние.getStickybitsData(element): возвращает объект с
текущими параметрами элемента (el, parent,
state), что облегчает интеграцию с другими скриптами.sticky.update(); // пересчет позиции всех элементов
sticky.destroy(); // удаление всех эффектов
console.log(sticky.getStickybitsData(document.querySelector('.element')));
В старых версиях классы были жёстко закреплены:
.is-sticky — элемент в липком состоянии..is-stuck — элемент достиг нижней границы
контейнера.В новой версии:
stickyClass и
stuckClass.useFixedClasses и classNamePrefix.position: sticky, но
и через fallback с position: fixed при отсутствии поддержки
браузером.Пример:
var sticky = Stickybits('.element', {
stickyClass: 'my-sticky',
stuckClass: 'my-stuck',
useFixedClasses: true
});
Ранее Stickybits использовала проверку position: sticky
и автоматически переключалась на position: fixed в
неподдерживаемых браузерах. Недостатком было отсутствие точного контроля
над этим поведением.
Новые версии добавили:
noStyles для отключения встроенных
стилей.update().В версии 2.x и ниже добавление новых элементов после инициализации
требовало повторного вызова Stickybits(selector).
В версии 3.x+:
update() корректно обрабатывает динамически добавленные
элементы.var newSticky = document.querySelectorAll('.new-element');
sticky.update(newSticky);
| Функция / опция | Старое API (v2.x) | Новое API (v3.x+) |
|---|---|---|
| Инициализация | new Stickybits(selector) |
Stickybits(selector, options) |
| Классы | Жёстко .is-sticky, .is-stuck |
Настраиваемые через stickyClass,
stuckClass |
| Методы управления | cleanup() |
update(), destroy(),
getStickybitsData() |
| Смещение | Только через CSS | Опция stickyBitStickyOffset |
| Поддержка динамики | Перезапуск инициализации | update(newElements) |
| Позиционирование fallback | Автоматическое | Можно настроить через useFixedClasses и события |
.is-sticky или .is-stuck нужно обновить на
новые классы, если используется кастомизация.update() для стабильного поведения при
изменении DOM.stickyBitStickyOffset вместо CSS top, если
требуется динамическое управление.cleanup() применять destroy() для полного
снятия стилей и слушателей.update(newElements) после добавления новых “липких” блоков
на страницу.Эти изменения позволяют более гибко управлять липкими элементами, обеспечивают совместимость с современными браузерами и облегчают интеграцию Stickybits в сложные интерфейсы с динамическим контентом.