【问题标题】:jQuery Smooth Scroll to Top AND to Anchor by IDjQuery 平滑滚动到顶部并按 ID 锚定
【发布时间】:2016-06-20 20:58:51
【问题描述】:

我正在寻找将 jQuery 滚动添加到顶部或滚动到锚点的答案,但实际上并不是两者都集成在一起。所以希望可以在这里提问。

我们有当前的 jQuery 函数来为更长的页面添加滚动到顶部的锚点。它工作正常。

// Add To Top Button 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');
    }
});

//Smoothy scroll to top
$back_to_top.on('click', function(event){
    event.preventDefault();
    $('body,html').animate({
        scrollTop: 0 ,
        }, scroll_top_duration
    );
});

});
  • 如何修改它以允许使用 ID(例如 <h2 id="anchor-name">)平滑滚动到页面上的锚点,而不会发生冲突?

澄清:我们需要对上述脚本进行修改,或者新建一个不会与之冲突的脚本,这将为页面现有 HTML 中的任何锚链接添加平滑滚动(例如,@987654323 @)。 JS 应该检测任何锚链接并为其添加平滑滚动功能。我们不会手动将特定的锚链接添加到 JS。

【问题讨论】:

  • 您希望如何识别要滚动到的 ID?在页面加载时解析 url?或者其他类型的输入(鼠标点击href)?
  • 是的,您的问题中没有足够的信息来确定要滚动到的什么。事实上,这可能是最难的部分,滚动到它对 jquery 来说是微不足道的
  • 为什么不使用真正的锚链接并让 jquery 处理这些,所以回退是正常行为? :)
  • 如果你想解析 url 并找到要滚动到的锚点,那么你可以在 .ready() 中找到该元素的 Y 偏移量。
  • 抱歉这里不够清楚。锚点和指向锚点的链接将手动添加到 HTML 中(使用 WordPress,因此添加到页面中)。我只是希望页面上的任何链接都能将您定向到 ID 以平滑滚动而不是硬跳转,同时又不会破坏当前的“滚动到顶部”功能。

标签: javascript jquery smooth-scrolling


【解决方案1】:

将滚动逻辑提取到自己的函数中,该函数接受元素的id 作为参数。

//Smoothy 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);
}

【讨论】:

  • 尝试用这个替换我的代码中 //Smoothy scroll to top 以下的所有内容,但没有运气。滚动到顶部仍然有效,但锚链接不流畅。这是否需要将特定的锚点添加到 JS 中,还是会从页面上的 HTML 中提取?!?抱歉,JS 不是很流利。我尝试添加一个当前锚 ID 来替换您的“锚名称”作为测试,但这也不起作用。需要它来在任何页面上获取 HTML 中现有的锚链接(例如,<a href="#any-anchor-name>)。
  • 抱歉造成混淆,我发布了一个编辑,应该完全按照您的描述进行。每个 HREF 以 # 开头的锚标记都会滚动到具有相应 ID 的元素。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-19
  • 1970-01-01
  • 2013-10-01
  • 1970-01-01
相关资源
最近更新 更多