zorro76
@zorro76

Странное поведение прилипающего header при обновлении страницы?

Собственно в чем проблема, есть прилипающее меню (header) при скролле, использую для этого простой скрипт на jQuery
$(window).scroll(function(){
		if ( $(document).scrollTop() >= 1) {
			$('.header').addClass("fixed");
		} else {
			$('.header').removeClass("fixed");
		}
	});

суть проста, если скроллить то к header присваивается класс fixed:
.header{
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
  width: 100%;
  max-width: 1920px;
  min-width: 1000px;
  background-color: transparent;
  display: block!important;
  z-index: 1045;
......//меню
}
.header.fixed{
  background-color: #ff9774;
  opacity: 0.98;
  filter: alpha(Opacity=98);
  z-index: 1099;
  height: auto;
  width: 100%;
}

так вот в чем проблема, скроллим к следующему блоку, все ок, применяется fixed, все функционирует, обновляем страницу первый раз все ок, второй раз все ок, но вот на третий или какой-то раз класс fixed отваливается, это случается иногда и с первого раза, иногда с третьего-четвертого. С чем это связанно может быть?
  • Вопрос задан
  • 531 просмотр
Решения вопроса 3
bootd
@bootd Куратор тега HTML
Гугли и ты откроешь врата знаний!
Запускать такие вещи нужно, используя 2 события. Загрузки документа и скрола документа.

Ведь, если мы обновили страницу где то по середине контента, то блок не прилипнет, ведь у вас он прилипает только при скролинге странце. Делать нужно так:

Либо так:
$(window).on('load scroll', function(){
//Скрипт
});


Либо так:

function fixedHeaderOnScroll(){
// Ваш код 
}

$(document).on('ready', function(){
fixedHeaderOnScroll();
});

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


При загрузке страницы не должно и не происходит событие скролла, а значит, ваш скрипт не должен срабатывать. С чего он у вас запускается, для меня загадка.

P.S. Какой смысл фиксировать блок, если длина скролла больше 1px? Не проще ли сразу зафиксировать блок?
Ответ написан
webirus
@webirus
Тыжверстальщик! Наверстай мне упущенное...
Я уже не помню точно, как решил в прошлый раз, но у меня такая хрень была.
Если $(window).scroll(function() находится в load или document ready вытащи оттуда.
Или если он не находится там, положи туда его)

Сейчас вот нашел еще вот такой хак, для document ready.
jQuery(window).scrollTop(jQuery(window).scrollTop() + 1);
jQuery(window).scrollTop(jQuery(window).scrollTop() - 1);
Ответ написан
delphinpro
@delphinpro Куратор тега JavaScript
frontend developer
var $w = $(window);
  $w.on('scroll', function(){
    $('.header').toggleClass("fixed", $w.scrollTop() > 0);
  }).trigger('scroll');
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
makasb
@makasb
web-dev
Смотри в консоли ошибки. Возможно периодически не срабатывает js-скрипт.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы