2017-06-12 58 views
0

我需要帮助指出我的javascript发生了什么。我有一些代码,当你在页面的那一部分时,应该让导航链接有一个活动的类,但它只是为一对夫妇链接工作,当你滚动而不是在整个时间保持活动时它也会闪烁你在页面的那一部分。以JSFiddle为例https://jsfiddle.net/7szpuqsr/ - 如果您慢速滚动,您可以看到“家”在一瞬间变得活跃。我试图让每个链接在您点击它时以及在页面的整个部分都有活动类。如何在使用javascript滚动时保持课程活动?

我也有一个JavaScript粘滞导航栏和平滑滚动工作,所以我不知道是否可能有任何阻碍的方式?预先感谢您的帮助。

这里的JavaScript的我想使用的活动类:

var sections = $('section') 
, nav = $('nav') 
, nav_height = nav.outerHeight(); 

$(window).on('scroll', function() { 
var cur_pos = $(this).scrollTop(); 

    sections.each(function() { 
    var top = $(this).offset().top - nav_height, 
    bottom = top + $(this).outerHeight(); 

    if (cur_pos >= top && cur_pos <= bottom) { 
    nav.find('a').removeClass('active'); 
    sections.removeClass('active'); 

    $(this).addClass('active'); 
    nav.find('a[href="#'+$(this).attr('id')+'"]').addClass('active'); 
    } 
    }); 
}); 

nav.find('a').on('click', function() { 
var $el = $(this) 
, id = $el.attr('href'); 

$('html, body').animate({ 
    scrollTop: $(id).offset().top - nav_height 
    }, 500); 

    return false; 
}); 
+0

那么你的代码删除并添加滚动的活动类,所以它要走了闪烁。你可以设置一个条件,如果活动班已经在那里,不要做任何事情 – Huangism

+0

你能告诉我那是什么样子吗?我仍然在学习JavaScript。 – SShine2

回答

1

像这样的事情?我不能在视觉上重现闪烁在我的机器上,但我可以看到被删除的类/不断补充上滚动

https://jsfiddle.net/7szpuqsr/1/

的主要变化,我添加了一个类你的部分,你有太多的部分,但与您的代码是为了工作的方式,它更容易添加一个类的部分,下面的例子

<section id="home" class="section"> 

var sections = $('.section')得到部分类

更新j的这部分s到检查活动类

if (cur_pos >= top && cur_pos <= bottom) { 
    if(!$(this).hasClass("active")) { 
    nav.find('a').removeClass('active'); 
    sections.removeClass('active'); 

    $(this).addClass('active'); 
    nav.find('a[href="#'+$(this).attr('id')+'"]').addClass('active'); 
    } 
} 

您也可以缓存$(this)到一个变量的部分循环内像

var $this = $(this); 

就用$this为循环的其余部分

这里是文档hasClasshttps://api.jquery.com/hasclass/

+0

我还在玩弄你的建议,但主要的东西需要得到菜单,我希望只是一个班,我的部分!我认为这可能与这些事情有关,因为我的部分太多了。有另一双眼睛是很好的。感谢你的帮助! – SShine2