Peterko
@Peterko

Как исправить скролл?

Добрый день.
Возник интересный вопрос, который пока сам не могу решить.
При помощи уже текущего примера Как сделать скролл как на ВК? был доработан скролл, что фиксируется центральная часть меню.
При нажатие на кнопку "1" правая часть скрывается. Но если правая часть скрыта то скролл работает не корректно и возвращает нас обратно вверх.
Пример https://jsfiddle.net/1591qjej/44/
  • Вопрос задан
  • 386 просмотров
Решения вопроса 1
@choupa
Архитектор (обычный, который строит)
Рассматриваем ситуацию, когда скрыта колонка rightbar.

Когда мы проматываем страницу до конца, жёлтое поле получает класс centralbar--fixed и position:fixed. Заметим, что других длинных элементов, высотой больше окна, в этот момент на странице нет. Есть только жёлтое поле, но он фиксировано и то, что оно вылезает выше верхнего края страницы не учитывается для скроллинга. Это означает, что скроллинг пропадает, т.е. в этот момент внезапно становится scrollTop = 0.

Что происходит дальше. Коль скоро значение scrollTop скакнуло в 0, в ту же секунду снова вызывается событие по скроллу, которое честно снимает только что установленный класс centralbar--fixed. Жёлтое поле становится нормально позиционированным, а поскольку scrollTop=0, то мы и видим его с самого начала (test1).

В вашем варианте предлагаю выключать обработчик скролла, когда он не нужен (скрыта колонка rightbar).

(function() {
    $(window).on('scroll', myScrollFunction);

    $('#timelineToggle').on('click', function() {
      $('.rightbar').toggleClass('close');
      $('.centerbar').toggleClass('test_2');
      if ($('.rightbar').hasClass('close'))	{
          $(window).off('scroll');
      else
          $(window).on('scroll', myScrollFunction);
    });
  })(jQuery)


Где myScrollFunction, очевидно, ваш обработчик скролла, тот который в отдельном файле.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
24 апр. 2024, в 22:00
500 руб./в час
24 апр. 2024, в 21:49
10000 руб./за проект