平滑滚动到 div id jQuery

IT技术 javascript jquery scroll
2021-01-24 15:54:26

我一直在尝试滚动到 div id jquery 代码才能正常工作。基于另一个堆栈溢出问题,我尝试了以下操作

演示http://jsfiddle.net/kevinPHPkevin/8tLdq/

$('#myButton').click(function() {
   $.scrollTo($('#myDiv'), 1000);
});

但它没有用。它只是捕捉到 div。我也试过

$('#myButton').click(function(event) {
     event.preventDefault();
   $.scrollTo($('#myDiv'), 1000);
});

毫无进展。

6个回答

你需要动画 html, body

演示http://jsfiddle.net/kevinPHPkevin/8tLdq/1/

$("#button").click(function() {
    $('html, body').animate({
        scrollTop: $("#myDiv").offset().top
    }, 2000);
});
@yesitsme ...在我的情况下向上或向下
2021-03-20 15:54:26
@vector 我有一个问题,一旦点击它,我必须与 jquery 斗争才能向上滚动,有什么解决方案吗?
2021-03-22 15:54:26
我有同样的问题,如果我有几个按钮需要滚动到不同的位置,尝试修改此代码但它不起作用。你能再举一个例子吗?
2021-03-26 15:54:26
为它找到了一些“修复”。正确元素的滚动现在已修复,但它仍然可以通过单击相同的“滚动到”目标上下移动:var target = $(this).data("target"); $(".basics-content").animate({scrollTop: $(target).offset().top}, 1000); });说明:.basics-content是我实际想要滚动到的模态的内部 div,target我提供了 ID 号元素的...
2021-03-26 15:54:26
@GraySpectrum up,只有在点击之后,听起来好像有延迟。
2021-03-29 15:54:26

如果要覆盖页面上的标准href-id 导航而不更改 HTML 标记以实现平滑滚动,请使用此(示例):

// handle links with @href started with '#' only
$(document).on('click', 'a[href^="#"]', function(e) {
    // target element id
    var id = $(this).attr('href');

    // target element
    var $id = $(id);
    if ($id.length === 0) {
        return;
    }

    // prevent standard hash navigation (avoid blinking in IE)
    e.preventDefault();

    // top position relative to the document
    var pos = $id.offset().top;

    // animated top scrolling
    $('body, html').animate({scrollTop: pos});
});
非常好。如果您只希望在某些链接上发生这种情况(例如您有一些要显示或隐藏信息),只需向它们添加一个类名并将您的类名(例如滚动条)添加到匹配声明的末尾(例如 a[href ^="#"].scroller)。
2021-03-19 15:54:26
如果没有 jQuery,你如何做到这一点?
2021-03-25 15:54:26
这种运作良好,我可以提出一个非常小的调整,var pos = $(id).offset().top;可以var pos = $id.offset().top;
2021-04-05 15:54:26

这是我的 2 美分:

Javascript:

$('.scroll').click(function() {
    $('body').animate({
        scrollTop: eval($('#' + $(this).attr('target')).offset().top - 70)
    }, 1000);
});

网址:

<a class="scroll" target="contact">Contact</a>

和目标:

<h2 id="contact">Contact</h2>
只有当您不声明 doctype 时,这才可以工作。
2021-03-12 15:54:26
我认为需要$('html, body').animate滚动
2021-03-13 15:54:26
eval这里有什么
2021-04-03 15:54:26

普通JS:

如果您使用现代浏览器,则可以在纯 JS 中完成。

document
    .getElementById("range-calculator")
    .scrollIntoView({ behavior: "smooth" });

浏览器支持有点问题,但现代浏览器支持它

普通嫌犯。桌面上的 Safari 也不支持它(根据 MDN)
2021-03-26 15:54:26
iOS 上的 Safari 不支持此功能
2021-04-03 15:54:26
我刚刚尝试了 safari 桌面,现在可以使用了。
2021-04-06 15:54:26

再举一个例子:

HTML链接:

<a href="#featured" class="scrollTo">Learn More</a>

JS:

  $(".scrollTo").on('click', function(e) {
     e.preventDefault();
     var target = $(this).attr('href');
     $('html, body').animate({
       scrollTop: ($(target).offset().top)
     }, 2000);
  });

HTML 锚点:

  <div id="featured">My content here</div>
早些时候它没有滚动到 div 的顶部,但后来我做了下面提到的更改并且它起作用了。scrollTop: ($(target).offset().top - 120)
2021-04-08 15:54:26