serovpochta
@serovpochta
Лысый

Фиксировать блоки при скролле, когда они достигают верха экрана(плавающие блоки)?

У меня есть рабочий скрипт, но он фиксирует только один блок под именем #data, а у меня их на странице много...
Как подправить скрипт, что бы работал со всеми одноименными блоками одинаково?

$(function(){
 var topPos = $('#data').offset().top;
 $(window).scroll(function() { 
  var top = $(document).scrollTop();
  if (top > topPos) $('#data').addClass('fixed'); 
  else $('#data').removeClass('fixed');
 });
});


css на всякий:

#data {
    width: 100%;
    height: 30px;
}
.fixed {
 position: fixed;
}


Спасибо!
  • Вопрос задан
  • 1283 просмотра
Пригласить эксперта
Ответы на вопрос 1
Stalker_RED
@Stalker_RED
Если они все на одной высоте, то все просто: вместо id="data" используйте ксласс class="my_class_name"

И в скрипте чуть подправить:
$(function(){
 var topPos = $('.my_class_name').first().offset().top;
 $(window).scroll(function() { 
  var top = $(document).scrollTop();
  if (top > topPos) $('.my_class_name').addClass('fixed'); 
  else $('.my_class_name').removeClass('fixed');
 });
});


Обратите внимание, при старте он запоминает высоту первого элемента с этим классом, какого нашел. Если они на разной высоте - придется сильнее переделывать, запоминать высоту для каждого.
Ответ написан
Ваш ответ на вопрос

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

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