bugo_aneo
@bugo_aneo
Верстальщик по жизни, буддист, кофеман

Как реализовать параллельный скролл в блоке?

Коллеги, прошу вас помочь мне разобраться со скроллом меню, параллельно со скроллом окна.

САБЖ:
Есть лайаут у которого есть ДЛИННОЕ сайдебар меню, упакованное в блок, который позволяет его скроллить.
При скролле окна, после шапки, сайдебвр прилепает к его верху и начинает скроллится сам.

ПРОБЛЕМА:
Если мы захотим сами, руками, проскроллить сайдебар, а потом вернемся к скроллу окна - сайдебар "подпрыгнет" на координату скролла у окна, что естественно.

НАДО:
Запомнить куда был проскроллен сайдебар пользователем, и начинать скролл именно с этой позиции, если есть куда скроллить, т.е. высота сайдебара еще не вся.

В обратную сторону, т.е. при скролле окна наверх, тоже должно работать.

НЕ ПОЛУЧАЕТСЯ адекватно придумать логику этого действа. Прошу вас помочь.

Песочница:


Заранее БЛАГОДАРЮ!
  • Вопрос задан
  • 134 просмотра
Пригласить эксперта
Ответы на вопрос 1
szQocks
@szQocks
const sidebarScroller = document.querySelector(".sidebar__scroller");

const state = {
  pageYOffset: 0
}

window.addEventListener("scroll", function (e) {
  const scrollMaxSideBar = sidebarScroller.scrollHeight - sidebarScroller.clientHeight;
  const procent = 3;
  const procentScrollSideBar = Math.round(procent * scrollMaxSideBar / 100);
  const scrollTopSideBar = Math.round(sidebarScroller.scrollTop);
   
  if(state.pageYOffset > window.pageYOffset){
    sidebarScroller.scrollTop = scrollTopSideBar - procentScrollSideBar;
  } else if(state.pageYOffset < window.pageYOffset){
    sidebarScroller.scrollTop = scrollTopSideBar + procentScrollSideBar;
  }
  
  state.pageYOffset = window.pageYOffset;
});
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы