gassmonkey
@gassmonkey
Провокатор

Как правильно сделать Scrollspy?

Имеется вот такой код.
// Scrollspy
$(window).scroll(function() {
    var paGe = $(window).scrollTop();
    var a1 = $('#a1').offset();
    var a2 = $('#a2').offset();
    var a3 = $('#a3').offset();
    if (paGe < a1.top){
        $('.nav li').removeClass('active');
    }
    if (paGe > a1.top){
        $('.nav li').removeClass('active');
        $('.nav li').eq(0).addClass('active');
    }
    if (paGe > a2.top){
        $('.nav li').removeClass('active');
        $('.nav li').eq(1).addClass('active');
    }
    if (paGe > a3.top){
        $('.nav li').removeClass('active');
        $('.nav li').eq(2).addClass('active');
    }
});

Как упростить его, чтоб не задавать значения, а перебирать их в цикле?
  • Вопрос задан
  • 1004 просмотра
Пригласить эксперта
Ответы на вопрос 1
@SirMustache
$(window).on('scroll', function() {
  var fromTop = $(document).scrollTop(),
      $items = $('.item'),
      allItems = [],
      $currentItem;

  allItems = $items.filter(function() {
    return $(this).offset().top < fromTop;
  });
  $currentItem = allItems.eq(allItems.length - 1);

  $items.removeClass('active');
  $currentItem.addClass('active');
});
Ответ написан
Ваш ответ на вопрос

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

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