2015-04-23 60 views
0

我有一个带2个div的页面。第一个包含项目列表,第二个包含列表中每个项目的1个部分。 向下滚动第二个div时,我希望正确的li在相应部分处于“活动状态”时突出显示。问题在于,他们在达到正确部分之前会受到高亮显示。 这是我制作的codepen。而这里的jQuery函数使用:Jquery,滚动条上显示的菜单项太早

$('#event-details .content').on('scroll', function() { 
    $('.event-title').each(function() { 
     if($('#event-details .content').scrollTop() >= $(this).offset().top) { 
      var id = $(this).attr('id'); 
      console.log(id); 
      $('.event-title').removeClass('active'); 
      $('#' + id).addClass('active'); 
     } 
    }); 
}); 

我想这个问题是对的条件,但我解决不了。任何想法呢?谢谢!

+0

没有答案,但FYI有很多免费的图书馆要做到这一点,例如https://github.com/sxalexander/jquery-scrollspy –

+0

看着代码和HTML,看起来你正在比较右侧的scrollTop和左侧的偏移......这看起来不对? –

+0

你好,你是对的,我的不好,谢谢。我更新了条件if($('#event-details .content')。scrollTop()> = $('。event-'+ id +'-details')。offset()。top)',但是现在第一个李总是突出显示。 – acanana

回答

0

通过您的意见第一个李总是突出显示。

这是因为它总是会返回1,因为scrollTop总是大于第一部分的偏移量。 因此,您将检查该部分结束的位置。这是顶部偏移加上该部分的高度。

$('#event-details .content').on('scroll', function() { 
    $('.event-title').each(function() { 
     var id = $(this).attr('id'); 
     if($('#event-details .content').scrollTop() >= $('.event-' + id + '-details').offset().top && 
      /* here is what is needed in the condition */ 
      $('#event-details .content').scrollTop() <= $('.event-' + id + '-details').offset().top + $('.event-' + id + '-details').height()) { 
      console.log(id); 
      $('.event-title').removeClass('active'); 
      $('#' + id).addClass('active'); 
     } 
    }); 
}); 

注:调整它一点你的口味改变(例如高度或像素的任何数量的一半)

+0

感谢您的回答!我更新了[codepen](http://codepen.io/acanana/pen/OVJjrQ),但项目3,4和5仍然突出显示... – acanana

+0

顺便说一下'id'应该是独特的,试着改变你的ID。 – Xlander

+0

id在

无意中。删除它,谢谢提醒;) – acanana