uliyanov_maks
@uliyanov_maks
Новичок

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

В общем задача такая:

1) Надо чтобы к "header__section-navbar" добавлялся класс "fix" при прокрутке страницы после того как скроется "header__section-info" - Это работает!
2) При прокрутке вверх еще добавить класс "scroll-up" и удалить при достижении "header__section-info" - Тут не могу разобраться :(
3) "fix" должен удалить когда достигнет "header__section-info" - Это работает!

Задумка такая, чтобы на десктопе блок становился всегда фиксированным, а при ширине экрана меньше 992px скрывался при прокрутке вниз, а вверх показывался. Сделал бы это по средствам css.
Знаю, что можно это реализовать на yavascript, но это для меня совсем сложно ((

Может есть лучше варианты? Буду рад узнать)

document.addEventListener('DOMContentLoaded', function () {
	'use strict';

	window.addEventListener('scroll', function () {
		const prevScrollpos = window.pageYOffset;
		// fixedHeader on scroll
		function fixedHeader() {

			var sectionInfo = document.querySelector('.header__section-info').offsetHeight;
			var headerOneELement = document.querySelector('.header__section-navbar');

			if (prevScrollpos > sectionInfo) {
				headerOneELement.classList.add('fix');
				headerOneELement.classList.add('scroll-up', prevScrollpos < sectionInfo);
				document.querySelector('.header').style.marginBottom = headerOneELement.offsetHeight + 'px';

			} else {
				headerOneELement.classList.remove('fix');
				headerOneELement.classList.remove('scroll-up');
				document.querySelector('.header').style.marginBottom = '0';
			}
			lastScroll = prevScrollpos;

		}
		fixedHeader();
	});
});
  • Вопрос задан
  • 250 просмотров
Решения вопроса 1
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 предыдущего события.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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