Закрепить блок при прокрутке

sticky_plugin1-3914846

5 октября 2019 JavaScript jQuery

Возникла задача сделать прикрепление сайдбара, такое же, как в ВКонтакте. При скролле до верхней границы элемента он закрепляется, а при достижении определенного уровня останавливается и прокручивается до конца вместе со страницей.

Раньше приходилось реализовывать подобное с нуля и это было не очень просто. Теперь выручает jQuery плагин Sticky. С ним можно реализовать множество задач с прикреплением элементов, а так же у него достаточное количество настроек и методов.

Скачиваем плагин на этом сайте.

sticky_plugin-8934161

Подключаем библиотеку jQuery и плагин примерно так:


И инициализируем плагин:

  $(document).ready(function(){
    $("#sticker").sticky({topSpacing:0});
  });

#sticker — ID блока, который нужно закрепить.

Проверяем. Работает!

Но мне было ещё необходимо сделать отступ у блока сверху, так как при скролле закреплялось верхнее меню. Ну и при достижении footer, чтобы он останавливался. Тут все просто, у плагина есть опции topSpacing и bottomSpacing это соответственно и есть нужные отступы сверху и снизу. В переменных topMenuHeight и footerHeight им я передал высоту блока с меню и высоту футера предварительно вычислив их с помощью jQuery.

$(document).ready(function(){
    var topMenuHeight = $("#top-menu").height();
    var footerHeight = $("footer").height();
    $(".sidebar-right").sticky({
        topSpacing:topMenuHeight,
        bottomSpacing:footerHeight
    });
    $(".sticky-right-sidebar").sticky({
        topSpacing:topMenuHeight,
        bottomSpacing:footerHeight
    });
});
  

Read More