【问题标题】:how to set different offset for each anchor when scrolling with jQuery使用jQuery滚动时如何为每个锚点设置不同的偏移量
【发布时间】:2018-05-22 09:15:25
【问题描述】:

我在页面上有几个部分,每个部分都指定了 sectionID。 我添加了用于滚动到锚点的 jQuery 函数,但滚动后我无法让所有锚点显示在同一位置。

我有名为健康、医学、金融、论文的部分。单击“健康”会滚动到健康部分的顶部,但单击“财务”链接会滚动到财务部分但带有偏移量。它不会停留在该部分的最顶部。

我的脚本如下。

<script type="text/javascript"> 
/* show active navigation element */
jQuery(document).ready(function () {
jQuery(document).on("scroll", onScroll);

});

//get scroll position and handle class active
function onScroll(event){
    var scrollPos = jQuery(document).scrollTop()+450;
    jQuery('#nav li a').each(function () {
        var currLink = jQuery(this);
        var refElement = jQuery(currLink.attr("href"));
        if (refElement.position().top <= scrollPos && refElement.position().top + refElement.height() > scrollPos) {
            jQuery('#nav li a').removeClass("active");
            currLink.addClass("active");
        }
        else{
            currLink.removeClass("active");
        }
    });
}

/* activate sticky navigation */
jQuery(document).ready(function() {  
   var stickyNavTop = jQuery('#nav').offset().top;  

   var stickyNav = function(){  
   var scrollTop = jQuery(window).scrollTop();  

   if (scrollTop > stickyNavTop) {   
       jQuery('#nav').addClass('sticky');  
   } else {  
       jQuery('#nav').removeClass('sticky');   
   }  
};  
stickyNav();  

jQuery(window).scroll(function() {  
    stickyNav();  
    });  
}); 
</script>

我发现了一个类似的问题here,但我无法让它与我的代码一起使用。

如何使用我正在使用的 jQuery 控制每个锚点的滚动偏移量?

【问题讨论】:

    标签: javascript jquery html css scroll


    【解决方案1】:

    我发现您有一个 Sticky Navigation stickyNav();,这可能会导致您的偏移量出现问题。

    为了获得正确的锚点偏移量,您必须注意将粘性导航的高度添加到滚动操作中,如下所示:

    $(document).on('click', 'a[href^="#"]', function (event) {
        event.preventDefault();
    
        $('html, body').animate({
            scrollTop: $($.attr(this, 'href')).offset().top - 100
            // 100 is the sticky nav height
        }, 500);
    });
    

    更多信息请看这篇文章:Smooth scrolling when clicking an anchor link

    【讨论】:

    • 嗨,克莱门特,我应该在哪里添加这个?我尝试将其添加到 //get scroll position and handle class active 上方,但在前端没有明显效果。
    • @Mario83 嗨,我已经更新了我的答案,你可以把这个(jQuery 兼容的)函数放在你的代码上,它会做你想做的事。
    • 谢谢。效果很好!只是一个问题,500 代表什么?它是否还设置了某种以像素为单位的距离?
    • 500 是确定动画将运行多长时间的时间:)。 api.jquery.com/animate/#animate-properties-options
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-05
    • 2012-10-28
    • 2020-08-16
    • 2023-03-26
    • 2014-10-31
    • 2013-02-24
    相关资源
    最近更新 更多