简体   繁体   English

jQuery平滑滚动到顶部并按ID锚定

[英]jQuery Smooth Scroll to Top AND to Anchor by ID

I'm finding answers for adding jQuery scroll to top OR scroll to anchors, but not really both integrated. 我正在寻找将jQuery滚动添加到顶部或滚动到锚点的答案,但实际上并没有两者都集成。 So hope it's OK to ask here. 所以希望可以在这里提问。

We have current jQuery function to add a scroll-to-top anchor for longer pages. 我们具有当前的jQuery函数,可为更长的页面添加滚动到顶部的锚点。 It works fine. 工作正常。

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

});
  • How would this be modified to also allow smooth scrolling to anchors on page, using an ID (eg, <h2 id="anchor-name"> ), without conflicts? 如何将其修改为还允许使用ID(例如<h2 id="anchor-name"> )平滑滚动到页面上的<h2 id="anchor-name"> ,而不会发生冲突?

TO CLARIFY: We need either a modification to the above script, or a complete new one that will not conflict with it, that will add smooth scrolling to any anchor link found in the existing HTML of a page (eg, <a href="#any-anchor-link"> ). 澄清:我们需要对上述脚本进行修改,或者需要一个与之不冲突的全新脚本,这将为在页面的现有HTML中找到的任何锚定链接(例如, <a href="#any-anchor-link"> )。 The JS should detect any anchor links and add the smooth scrolling functionality to it. JS应该检测到任何锚链接,并向其中添加平滑滚动功能。 We would not manually add specific anchor links to the JS. 我们不会手动将特定的锚链接添加到JS。

Extracted the scrolling logic into its own function, which accepts an element's id as an argument. 将滚动逻辑提取到其自己的函数中,该函数接受元素的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);
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM