Bliss.js — легковесная библиотека для работы с DOM, которая предоставляет удобные методы для управления событиями, классами и анимациями. Одной из распространённых задач в веб-разработке является реализация плавной прокрутки страницы к определённым элементам. Bliss.js делает это максимально просто, сохраняя чистоту кода и минимизируя зависимости.
Для начала необходимо выбрать элемент, по которому будет кликать
пользователь, чтобы инициировать прокрутку, а также элемент, к которому
необходимо прокрутить страницу. Bliss.js предоставляет функцию
$$ для выборки нескольких элементов и $ для
одного элемента:
const link = $('.scroll-link'); // Кнопка или ссылка
const target = $('#target-section'); // Секция, к которой будет прокрутка
Метод on используется для привязки событий:
link.on('click', function(event) {
event.preventDefault();
// Логика прокрутки будет здесь
});
Ключевой момент — использование event.preventDefault(),
чтобы предотвратить стандартное поведение ссылки и сохранить контроль
над анимацией.
Bliss.js предоставляет метод animate для плавной
анимации числовых свойств. Прокрутку страницы можно осуществлять через
свойство scrollTop:
$('html, body').animate(
{ scrollTop: target.offsetTop },
600 // продолжительность анимации в миллисекундах
);
Пояснения:
scrollTop задаёт вертикальное смещение окна
просмотра.target.offsetTop возвращает позицию элемента
относительно начала страницы.600
соответствует 0.6 секунды.Для более естественного эффекта движения можно использовать функции
плавности (easing). Bliss.js поддерживает стандартные функции типа
linear, ease-in, ease-out и
ease-in-out:
$('html, body').animate(
{ scrollTop: target.offsetTop },
800,
'ease-in-out'
);
Преимущества применения easing:
Bliss.js упрощает работу с якорными ссылками. Вместо ручного вычисления позиции элемента можно автоматически прокручивать к элементу с соответствующим ID:
$$('a[href^="#"]').forEach(link => {
link.on('click', function(event) {
event.preventDefault();
const targetId = this.getAttribute('href').slice(1);
const targetElement = $(`#${targetId}`);
if (targetElement) {
$('html, body').animate({ scrollTop: targetElement.offsetTop }, 700);
}
});
});
Особенности реализации:
a[href^="#"] выбирает все ссылки, указывающие
на якорь.slice(1) удаляет символ # из
строки.if (targetElement) предотвращает ошибки при
отсутствии элемента на странице.Если на странице присутствует фиксированное меню, необходимо корректировать смещение, чтобы целевой элемент не оказался скрытым:
const headerHeight = $('.header').offsetHeight;
$('html, body').animate(
{ scrollTop: target.offsetTop - headerHeight },
600,
'ease-in-out'
);
Это позволяет точно настроить позицию видимой области после прокрутки.
Bliss.js позволяет прерывать текущую анимацию при повторном клике или новом действии:
$('html, body').stop().animate({ scrollTop: target.offsetTop }, 600);
Метод stop() немедленно останавливает активную анимацию,
предотвращая наложение нескольких анимационных действий.
Плавная прокрутка в Bliss.js легко интегрируется с другими анимациями и визуальными эффектами, например, с постепенным появлением элементов при скролле:
$('html, body').animate(
{ scrollTop: target.offsetTop },
700,
'ease-out',
() => {
target.addClass('visible');
}
);
Примечание: колбэк-функция вызывается после завершения анимации, что удобно для цепочек эффектов.
Bliss.js обеспечивает лаконичный и удобный способ реализации плавной
прокрутки, включая поддержку easing, прерывание анимаций и адаптацию к
фиксированным шапкам. Использование встроенных методов
animate, on и селекторов
$/$$ делает код чистым и легко поддерживаемым,
позволяя создавать интерактивные и визуально привлекательные интерфейсы
без дополнительных библиотек.