Как отключить скрол контента

440
15 июля 2017, 09:46

Друзья, прошу сразу обратить внимание на сайт: Сайт

Я делаю мобильную версию. В хедере есть кнопка открытия меню. Как только я на нее нажимаю, контент выдвигается и становится видна левая панель. Для того что бы контент не скролился я отключаю скроллинг функцией Scroll

Вот она:

function Scroll(str)
    {
      var scrollPosition = [
        self.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft,
        self.pageYOffset || document.documentElement.scrollTop  || document.body.scrollTop
      ];
      if(str=="off")
      {
        var html = jQuery("html");
        html.data("scroll-position", scrollPosition);
        html.data("previous-overflow", html.css("overflow"));
        html.css("overflow", "hidden");
        window.scrollTo(scrollPosition[0][1], scrollPosition[1][0]);
        $(".contentlayer").bind("touchmove", function(e){e.preventDefault()});
      }
      else
      {
        var html = jQuery("html");
        var scrollPosition = html.data("scroll-position");
        html.css("overflow", html.data("previous-overflow"));
        window.scrollTo(scrollPosition[0], scrollPosition[1]);
        $(".contentlayer").unbind("touchmove");
      }
    }

Если контент на сайте НЕ БЫЛ прокручен, то есть мы находимся на позиции 0 0 то все работает нормально. Если же прокрутить контент немного вниз, а затем нажать на кнопку меню, то происходят скачки. Сначало моментальный подьем в точку 0 0 а затем выдвигание панели и кривая анимация. Как только мы жмем на меню еще раз, то блок с контентом задвигается и устанавливается позиция та которая была.

ВОПРОС: как убрать скачек? Я хочу что бы при прокрутке контента, и нажатия на кнопку меню блок с контентом не поднимался в 0 0, а просто остался так как есть, но скрол при этом был отключен.

Все css и функции можно просмотреть в принципе в исходном коде страницы.

Answer 1

Я для себя выбрал следующий вариант решения данной проблемы:

  1. Для body задаем:

    body {
      overflow-x:hidden;
      overflow-y:auto;
    }
    
  2. Добавляем новый класс для body, например, .fixed:

    body.fixed {  
      overflow:hidden;
    }
    
  3. При открытии/закрытии меню добавляем/удаляем у body класс .fixed. Например, так:

    $('.menu').on('click',function() {
      $('body').toggleClass('fixed');
    });
    
READ ALSO
Как добавить маску в инпут?

Как добавить маску в инпут?

У меня есть свой компонент Input, менять который нежелательнои мне нужно сделать маску

232
Интеграция getresponse c drupal 7

Интеграция getresponse c drupal 7

Скачал плагин с офф сайта, установил, и сразу же в консоли выдает ошибку: Uncaught TypeError: Cannot read property 'onchange' of null at windowonload (js_my_file:119)

228
Валидация ссылки профилей из соц сетей js regex

Валидация ссылки профилей из соц сетей js regex

Хочу сделать правильную валидацию полей, для ввода линков, профайлов, из соц сетей

259