jquery平滑滚动到锚点?

IT技术 javascript jquery
2021-02-07 05:50:23

有没有办法使用 jQuery 向下滚动到锚链接?

喜欢:

$(document).ready(function(){
  $("#gotomyanchor").click(function(){
      $.scrollSmoothTo($("#myanchor"));
  });
});

?

6个回答

这是我如何做到的:

    var hashTagActive = "";
    $(".scroll").on("click touchstart" , function (event) {
        if(hashTagActive != this.hash) { //this will prevent if the user click several times the same link to freeze the scroll.
            event.preventDefault();
            //calculate destination place
            var dest = 0;
            if ($(this.hash).offset().top > $(document).height() - $(window).height()) {
                dest = $(document).height() - $(window).height();
            } else {
                dest = $(this.hash).offset().top;
            }
            //go to destination
            $('html,body').animate({
                scrollTop: dest
            }, 2000, 'swing');
            hashTagActive = this.hash;
        }
    });

然后你只需要像这样创建你的锚点:

<a class="scroll" href="#destination1">Destination 1</a>

你可以在我的网站上看到它
这里也有一个演示:http : //jsfiddle.net/YtJcL/

如何使用这种技术从页面顶部制作锚点偏移量(假设为 50 像素)。
2021-03-14 05:50:23
@JamieCollingwood dest=$(this.hash).offset().top-50; 我认为这可以解决问题。
2021-03-27 05:50:23
检查以查看可以滚动到的最低点有什么意义?如果您尝试滚动到最后一个窗口高度以下,某些浏览器是否会出错?Chrome 似乎并不介意;即,设置scrollTop: veryHighNumber只会将您带到页面底部。
2021-03-29 05:50:23
我想动画会很难被切断,因为 jQuery 试图为指定的完整长度设置动画,而浏览器会在窗口到达末尾时停止滚动。
2021-04-10 05:50:23
不错的解决方案!只需注意记录,链接需要指向带有 的元素id,而不是锚点name在我更仔细地查看您的 Fiddle 之前,我认为是后者并且对此感到非常沮丧。干杯!
2021-04-12 05:50:23

我将使用来自 CSS-Tricks.com 的简单代码片段:

$(function() {
  $('a[href*=#]:not([href=#])').click(function() {
    if (location.pathname.replace(/^\//,'') == this.pathname.replace(/^\//,'') && location.hostname == this.hostname) {
      var target = $(this.hash);
      target = target.length ? target : $('[name=' + this.hash.slice(1) +']');
      if (target.length) {
        $('html,body').animate({
          scrollTop: target.offset().top
        }, 1000);
        return false;
      }
    }
  });
});

来源http : //css-tricks.com/snippets/jquery/smooth-scrolling/

呃,不知道这个片段是如何工作的。应该$('a[href*="#"]:not([href="#"])')
2021-03-15 05:50:23
请注意, pathname 属性不包含任何 get 变量,因此如果您的 url 仅因 get 变量不同,则此代码将不起作用。
2021-03-22 05:50:23
原则上 - 使用代码而不是链接- meta.stackexchange.com/questions/8231/...
2021-03-23 05:50:23
这是一个非常棒的嵌入式解决方案
2021-03-26 05:50:23
这可能是更好的解决方案,如果你想让你的所有页面内锚链接滚动动画而没有任何装饰等。否则 jQuery.scrollTo 有很多很酷的其他技巧(检查他们的演示页面)
2021-04-10 05:50:23

迄今为止我见过的最佳解决方案: jQuery: Smooth Scrolling Internal Anchor Links

HTML:

<a href="#comments" class="scroll">Scroll to comments</a>

脚本:

jQuery(document).ready(function($) {
    $(".scroll").click(function(event){     
        event.preventDefault();
        $('html,body').animate({scrollTop:$(this.hash).offset().top}, 500);
    });
});
此版本打破了指向其他页面的锚点。
2021-03-30 05:50:23
这确实是最简单的解决方案,加上您想要平滑滚动的任何未来链接,您只需将“滚动”类添加到链接即可。
2021-04-03 05:50:23

jQuery.scrollTo会做你想做的一切,甚至更多!

您可以将各种不同的东西传递给它:

  • 一个原始数字
  • 一个字符串('44'、'100px'、'+=30px'等)
  • 一个 DOM 元素(逻辑上,可滚动元素的子元素)
  • 一个选择器,它将相对于可滚动元素
  • 要滚动到末尾的字符串 'max'。
  • 一个字符串,指定滚动到容器该部分的百分比(fe: 50% 转到 * 到中间)。
  • 散列 { top:x, left:y }, x 和 y 可以是任何类型的数字/字符串,如上所示。
这是插件吗?因为我试过了,什么也没发生..我用了这个: $.scrollTo("#addNewUA",800, {easing:'elasout'});
2021-03-15 05:50:23
是的,它是一个插件,因此您需要下载并包含它。虽然它非常轻巧,但功能非常棒。(注意:除了在很多网站上使用它之外,我没有任何个人联系)
2021-03-22 05:50:23

这是我用来快速将 jQuery scrollTo 绑定到所有锚链接的代码:

// Smooth scroll
$('a[href*=#]').click(function () {
    var hash = $(this).attr('href');
    hash = hash.slice(hash.indexOf('#') + 1);
    $.scrollTo(hash == 'top' ? 0 : 'a[name='+hash+']', 500);
    window.location.hash = '#' + hash;
    return false;
});
看起来您可能需要 jQuery scrollTo 插件才能使此代码工作?
2021-04-06 05:50:23