在滚动条上突出显示导航部分

Highlight nav section on scroll

我有一个固定的侧边导航,可以跳转到旁边的内容中的某些点。

我无法控制这个 mark-up。我需要根据页面滚动到文档的哪个部分添加一个活动的 class onscroll:

 <div id="fixed-side-nav">
 <ul>
 <li><a id="linkSec001" onclick="scrollToSection('Sec001')" href="#">Link to section one</a></li>
 <li><a id="linkSec002" onclick="scrollToSection('Sec002')" href="#">Link to section two</a></li>
 <li><a id="linkSec003" onclick="scrollToSection('Sec001')" href="#">Link to section Three</a></li>
 </ul>
 </div>

内容结构如下:

 <div id="content">
   <h2 id="Sec001">Section One</h2>
   <!--CONTENT HERE-->
   <h2 id="Sec002">Section One</h2>
   <!--CONTENT HERE-->
   <h2 id="Sec003">Section One</h2>
   <!--CONTENT HERE-->
</div>

问题是这些 ID 的名称和数量可能不同。因此解决方案需要足够灵活。

我希望清楚...

** 更新 **

我正在尝试以下操作:

 jQuery(window).on('load scroll resize', function (){   
// Assign active class to nav links while scrolling
var scrollDistance = jQuery(window).scrollTop();    
jQuery('#timelineFulltext h2').each(function(i) {
    if (jQuery(this).position().top <= scrollDistance) {
        jQuery('.fixed-timeline li.active').removeClass('active');
        jQuery('.fixed-timeline a').eq(i).parents('li').addClass('active');
    } 
})

});

当标题间隔良好时,此方法效果很好,但当您将许多标题靠得很近时,效果就不太好。

将活动 class 添加到如下所述的列表中

<ul>
  <li><a class="active"  href="#Sec001">Link to section one</a></li>
  <li><a  href="#Sec002">Link to section two</a></li>
  <li><a  href="#Sec003">Link to section Three</a></li>

在活动列表中添加一个css以在活动时突出显示

.fixed-side-nav .active{
  color:'red'
 }

添加 Jquery 以在滚动时激活

!(function($) {
   // Smooth scroll for the navigation menu and links with .scrollto classes
   var scrolltoOffset = $('#header').outerHeight() - 1;
   $(document).on('click', '.nav-menu a, .mobile-nav a, .scrollto', function(e) {
   if (location.pathname.replace(/^\//, '') == this.pathname.replace(/^\//, '') && 
   location.hostname == this.hostname) {
   var target = $(this.hash);
   if (target.length) {
    e.preventDefault();

    var scrollto = target.offset().top - scrolltoOffset;

    if ($(this).attr("href") == '#header') {
      scrollto = 0;
    }

    $('html, body').animate({
      scrollTop: scrollto
    }, 1500, 'easeInOutExpo');

    if ($(this).parents('.nav-menu, .mobile-nav').length) {
      $('.nav-menu .active, .mobile-nav .active').removeClass('active');
      $(this).closest('li').addClass('active');
    }

     if ($('body').hasClass('mobile-nav-active')) {
       $('body').removeClass('mobile-nav-active');
       $('.mobile-nav-toggle i').toggleClass('icofont-navigation-menu icofont-close');
       $('.mobile-nav-overly').fadeOut();
     }
     return false;
   }
 }
});
})(jQuery);

1.change这个脚本根据你的html
2.The滚动到功能是在滚动到特定部分时激活导航栏

我通过执行以下操作使它起作用:

 jQuery(window).on('load scroll resize', function (){   
// Assign active class to nav links while scrolling
var windowTop = jQuery(window).scrollTop();
jQuery('h2').each(function (index, elem) {
    var offsetTop = jQuery(elem).offset().top;
    var outerHeight = jQuery(this).outerHeight(true);

    if( windowTop > (offsetTop - 110) && windowTop < ( offsetTop + outerHeight)) {
        var elemId = jQuery(elem).attr('id');
        jQuery('.fixed-side-nav li.active').removeClass('active');
        jQuery('.fixed-side-nav a.'+elemId).parents('li').addClass('active');
    }
}); 

});