• Как добавить/удалить class после прокрутки?

    ValeriuCutebov
    @ValeriuCutebov
    Привет! Для добавления класса scroll-up при прокрутке вверх можно сохранять предыдущее значение scrollTop и сравнивать его с текущим значением при каждом событии прокрутки. Если текущее значение меньше предыдущего, то добавляем класс scroll-up, иначе удаляем его. Для удаления класса scroll-up при достижении header__section-info можно получить координаты этого элемента и удалить класс, если текущее значение scrollTop больше или равно его координатам.

    Вот пример кода:
    document.addEventListener('DOMContentLoaded', function () {
      'use strict';
    
      var prevScrollpos = window.pageYOffset;
      var sectionInfo = document.querySelector('.header__section-info').getBoundingClientRect().top + window.pageYOffset;
      var headerOneELement = document.querySelector('.header__section-navbar');
    
      window.addEventListener('scroll', function () {
        var currentScrollpos = window.pageYOffset;
    
        // fixedHeader on scroll
        function fixedHeader() {
          if (currentScrollpos > sectionInfo) {
            headerOneELement.classList.add('fix');
            headerOneELement.classList.add('scroll-up');
            document.querySelector('.header').style.marginBottom = headerOneELement.offsetHeight + 'px';
    
            if (currentScrollpos < prevScrollpos) {
              headerOneELement.classList.remove('scroll-up');
            }
          } else {
            headerOneELement.classList.remove('fix');
            headerOneELement.classList.remove('scroll-up');
            document.querySelector('.header').style.marginBottom = '0';
          }
          prevScrollpos = currentScrollpos;
        }
    
        fixedHeader();
      });
    });

    Обрати внимание, что я сохраняю координаты header__section-info в переменной sectionInfo с учетом текущего значения scrollTop. Я также инициализирую переменную prevScrollpos вне функции обработчика события прокрутки, чтобы она была доступна внутри обработчика и сохраняла значение scrollTop предыдущего события.
    Ответ написан
    8 комментариев
  • Что нужно изменить, чтобы скрипт работал без jQuery?

    mrusklon
    @mrusklon
    Не получается? Яростно гугли!
    может так?
    document.addEventListener('DOMContentLoaded', function() {
    'use strict';
    
    window.addEventListener('scroll', function () {
    // fixedHeader on scroll
    function fixedHeader() {
      var headerTopBar = document.querySelector('.top-bar').offsetHeight;
      var headerOneTopSpace = document.querySelector('.header-one .logo-area').offsetHeight;
    
      var headerOneELement = document.querySelector('.header-one .site-navigation');
    
      if (window.pageYOffset > headerTopBar + headerOneTopSpace) {
        headerOneELement.classList.add('navbar-fixed');
        document.querySelector('.header-one').style.marginBottom = headerOneELement.offsetHeight + 'px';
      } else {
        headerOneELement.classList.remove('navbar-fixed');
        document.querySelector('.header-one').style.marginBottom = '0';
      }
    }
    fixedHeader();
    });
    });
    Ответ написан
    1 комментарий