【问题标题】:jQuery Smooth Scroll to Top AND to Anchor by ID (with Offset)jQuery 平滑滚动到顶部并按 ID 锚定(带偏移)
【发布时间】:2016-07-30 01:23:35
【问题描述】:

这是对之前在此处回答的问题的扩展:See Prevoius Question

我有一点 jQuery,它既可以平滑滚动到顶部功能,又可以平滑滚动到页面上的任何锚点。

现在,我只需要为锚滚动添加一个偏移量 (110px) 以解决固定标题,而不会弄乱滚动到顶部的功能。

这是现有的代码:

// Add To Top Button + Smooth Scroll to Anchors functionality
jQuery(document).ready(function($){
    // Scroll (in pixels) after which the "To Top" link is shown
    var offset = 700,
    //Scroll (in pixels) after which the "back to top" link opacity is reduced
    offset_opacity = 1200,
    //Duration of the top scrolling animation (in ms)
    scroll_top_duration = 700,
    //Get the "To Top" link
    $back_to_top = $('.to-top');

//Visible or not "To Top" link
$(window).scroll(function(){
    ( $(this).scrollTop() > offset ) ? $back_to_top.addClass('top-is-visible') : $back_to_top.removeClass('top-is-visible top-fade-out');
    if( $(this).scrollTop() > offset_opacity ) { 
        $back_to_top.addClass('top-fade-out');
    }
});

//Smooth scroll to top
$back_to_top.on('click', function(event) {
    event.preventDefault();
    targetedScroll();
});

// example of smooth scroll to h2#anchor-name
$('#some-button').on('click', function(event) {
    event.preventDefault();
    targetedScroll('anchor-name');
});

// bind smooth scroll to any anchor on the page
$('a[href^="#"]').on('click', function(event) {
    event.preventDefault();
    targetedScroll($(this).attr('href').substr(1));
});

// scrolling function
function targetedScroll(id) {
    // scrollTop is either the top offset of the element whose id is passed, or 0
    var scrollTop = id ? $('#' + id).offset().top : 0;

    $('body,html').animate({
        scrollTop: scrollTop,
    }, scroll_top_duration);
}

});

【问题讨论】:

  • 在我的网站上,我只是给导航栏下方页面上的第一个元素一个锚点。这样你仍然可以使用偏移量。
  • 嗨,我不确定我是否在此处关注您添加额外的锚点或“仍在使用偏移量”(我还没有设置偏移量,这就是我希望了解如何添加的内容) .

标签: javascript jquery smooth-scrolling


【解决方案1】:

每当您滚动到某个元素时,您必须滚动到比该元素低固定导航栏高度的位置。同样,页面上的第一个元素需要一个边距或内边距来偏移导航栏的高度。

由于这两个偏移量相同,您可以在为第一个元素设置偏移量的同时设置滚动偏移量。当您滚动到一个元素时,从顶部的高度减去偏移量。即使滚动到顶部,这仍然有效。

jQuery(document).ready(function($) {
    var offset = $("nav").height();
    $("body").css("padding-top", offset + "px");
    $('a[href^="#"]').click(function(event) {
        event.preventDefault();
        var scrollY = $(this.href).offset().top;
        $('html, body').animate({
            scrollTop: scrollY - offset
        }, 2000);
    });
});

【讨论】:

  • 嗯,我不确定我是否理解它应该如何工作。我在现有代码(上图)之后添加了这个函数,它似乎只是在 body 标记中添加了一个手动填充。所以头球和一切都被推倒了。但即便如此,锚链接仍然指向页面的最顶部(填充上方)。所以这几乎就像我需要与此相反的(填充锚,而不是身体)。仅供参考,由于锚点是可见元素 (h2) 并且已经使用了伪元素 (h2:before),因此我无法执行大多数纯 CSS 的解决方法。
  • 你能做一个显示问题的 JSFiddle 吗?顺便说一句,这是我让它工作的网站(也有修改):ignite.bentonvillek12.org
  • 嗨,它来自一个 WordPress 网站,因此需要相当长的时间来模拟一些具有足够依赖和样式的东西,以作为一个很好的例子。看起来您的代码的一部分是确定顶部填充并将其添加到正文。仅此一项并不能帮助我,当我禁用您的锚时,锚仍然有效。所以猜测它在最后几行?这些是否与我的代码已经在做的冲突,或者它们可以集成在一起?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-20
相关资源
最近更新 更多