使用JavaScript滚动到页面顶部吗?


Answers:


2170

如果您不需要更改以进行动画处理,则无需使用任何特殊的插件-我只使用本机JavaScript window.scrollTo方法-传入0,0即可将页面立即滚动到左上角。

window.scrollTo(x-coord, y-coord);

参量

  • x坐标是沿水平轴的像素。
  • y坐标是沿垂直轴的像素。

176
那就是我的观点,如果您不需要动画化平滑滚动,那么就不需要使用jQuery。
daniellmb

22
有趣的是,对于仅希望事情在跨浏览器中正常工作的人,jeff的评论很诚实,因为95%的时间应该只使用jQuery。这是从人谁也写了很多纯JavaScript的马上来,因为我们买不起库的开销放慢广告代码:(
威尔

11
这个答案与问题无关。如果存在以下问题,那就很好了:我应该使用什么脚本和方法滚动到页面顶部?正确的答案就在这里:stackoverflow.com/questions/4147112/...
skobaljic

2
在Firefox 40和Chrome 44中为我工作(以回应米哈伊尔的评论)
Tony

10
滚动到页面底部window.scrollTo(0, document.body.scrollHeight);
emix

1343

如果您确实希望平滑滚动,请尝试以下操作:

$("a[href='#top']").click(function() {
  $("html, body").animate({ scrollTop: 0 }, "slow");
  return false;
});

这将采用任何<a>标签,href="#top"使其平滑滚动到顶部。


+1。我只是想知道如何做这样的事情,谷歌将我引到这里。但是,在文档中“ scrollTop”函数在哪里?我只是看了一下却找不到。
sqram

22
scrollTop不起作用,它是窗口元素的属性
Jalal El-Shaer

1
使用animate的完整回调时,此方法无法正常运行,因为它将运行两次。
大卫·莫拉莱斯

5
浏览器兼容性同时需要“ html”和“ body”,即Chrome v27仅滚动“ body”,而IE8则不需要。IE8仅滚动“ html”,而Chrome v27则不滚动。
SushiGuy

1
@jalchr实际上,window.pageYOffset它将是窗口e̶l̶e̶m̶e̶n̶t̶对象的属性。
Alex W

176

尝试此滚动顶部

<script>
 $(document).ready(function(){
    $(window).scrollTop(0);
});
</script>

这是相同的:if(history中的'scrollRestoration'){history.scrollRestoration ='manual'; }
Vasilii Suricov '19

123

平滑动画的更好解决方案:

// this changes the scrolling behavior to "smooth"
window.scrollTo({ top: 0, behavior: 'smooth' });

参考:https : //developer.mozilla.org/zh-CN/docs/Web/API/Window/scrollTo#Example


您可能仍需要为ScrollOptions(某些浏览器)提供polyfill
jneuendorf

我非常喜欢这种解决方案。
SuperManEver

有人可以在Safari或Internet Explorer上对其进行测试,然后查看是否运行正常吗?谢谢
Fabio Magarelli

1
@FabioMagarelli它在Safari上运行良好,未在IE上测试。仅供参考,以便在safari上对其进行测试,打开任何具有滚动并将复制的代码粘贴到开发人员工具->控制台中的页面,它将滚动到顶部验证(Safari版本13.0.5)。
Ganesh Ghalame

104

您不需要jQuery即可执行此操作。一个标准的HTML标签就足够了...

<div id="jump_to_me">
    blah blah blah
</div>

<a target="#jump_to_me">Click Here To Destroy The World!</a>

12
+1如果您需要导航到特定元素而不是仅导航到顶部,则很好。
伊什

38
使用“ <a href="#">顶部</a>”跳至页面顶部。
Bakanekobrain

3
这似乎是与SPA打交道的最佳方式
Phil

真好!有没有办法使它平滑滚动?
失速

65

所有这些建议都适用于各种情况。对于那些谁通过搜索找到这个网页,还可以给这个一试。jQuery,无插件,滚动到element。

$('html, body').animate({
    scrollTop: $("#elementID").offset().top
}, 2000);

47

平滑滚动,纯JavaScript:

(function smoothscroll(){
    var currentScroll = document.documentElement.scrollTop || document.body.scrollTop;
    if (currentScroll > 0) {
         window.requestAnimationFrame(smoothscroll);
         window.scrollTo (0,currentScroll - (currentScroll/5));
    }
})();

31
<script>
$(function(){
   var scroll_pos=(0);          
   $('html, body').animate({scrollTop:(scroll_pos)}, '2000');
});
</script>

编辑:

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

另一种滚动顶部和左侧边距的方法:

window.scrollTo({ top: 100, left: 100, behavior: 'smooth' });

4
您确定动画功能中的字符串持续时间有效吗?
yogesh

您不能在animate函数的持续时间中使用字符串,而应使用:$('html, body').animate({scrollTop:(scroll_pos)}, 2000);
Kenny Alvizuris

1
将0括在括号中的意义是什么?((0))将简单地评价为0。
杰克小瓶

是的,@ Jack,可以。
卡姆列什

29
<script>

  $("a[href='#top']").click(function() {
     $("html, body").animate({ scrollTop: 0 }, "slow");
     return false;
  });
</script>

在HTML

<a href="#top">go top</a>

28

真的很奇怪:这个问题已经存在了五年了,现在还没有香草的JavaScript动画来激活滚动效果……所以您可以:

var scrollToTop = window.setInterval(function() {
    var pos = window.pageYOffset;
    if ( pos > 0 ) {
        window.scrollTo( 0, pos - 20 ); // how far to scroll on each step
    } else {
        window.clearInterval( scrollToTop );
    }
}, 16); // how fast to scroll (this equals roughly 60 fps)

如果愿意,可以将其包装在函数中,然后通过onclick属性进行调用。检查这个jsfiddle

注意:这是一个非常基本的解决方案,可能不是性能最高的解决方案。可以在这里找到一个非常详细的示例:https : //github.com/cferdinandi/smooth-scroll


6
这个问题明确要求一个jQuery解决方案。所以并不奇怪
2014年

2
对我来说最好的解决方案。没有插件,没有笨拙的jQuery库,只是简单的JavaScript。荣誉
user2840467 '11

伙计,我也在5年后创建了相同的逻辑XD,逻辑完全相同,只是值不同,例如间隔时间和我们用来减去的整数,简直不敢相信XD。TBH,是来这里回答的,但是已经存在了,所以支持您的回答。
Germa Vinsmoke

27

如果要平滑滚动,请尝试以下操作:

$("a").click(function() {
     $("html, body").animate({ scrollTop: 0 }, "slow");
     return false;
});

另一个解决方案是JavaScript window.scrollTo方法:

 window.scrollTo(x-value, y-value);

参数:

  • x值是沿水平轴的像素。
  • y值是沿垂直轴的像素。

7
山寨...看到用户的答案......这仅仅是一个顶部2答案汇编....
洛朗乙

这是使用stackoverflow的合法方法-将其放在一个地方更实际。Joel Spolsky以重用现有答案为例,说明stackoverflow应该如何在某一时刻工作。如果您有兴趣,我可以尝试找到博客文章
Edgar H

26

With window.scrollTo(0, 0);非常快,
因此我尝试了Mark Ursino示例,但是在Chrome中什么也没发生
,所以我发现了这一点

$('.showPeriodMsgPopup').click(function(){
    //window.scrollTo(0, 0);
    $('html').animate({scrollTop:0}, 'slow');//IE, FF
    $('body').animate({scrollTop:0}, 'slow');//chrome, don't know if Safari works
    $('.popupPeriod').fadeIn(1000, function(){
        setTimeout(function(){$('.popupPeriod').fadeOut(2000);}, 3000);
    });
});

测试了所有3种浏览器,并且都正常工作,
我正在使用蓝图CSS,
这是当客户单击“立即预订”按钮且未选择租借期时,慢慢移至日历所在的顶部并打开一个对话框div,指向2个字段,在3秒后消失


感谢您指出您需要同时定位html和body。我只是为html做它,想知道为什么它在Chrome中不起作用。
杰瑞德(Jared)

身体动画确实可以在Safari中使用,因此,我正在相应地更新您的答案。
Dave DuPlantis,2011年

46
“测试了所有3种浏览器 ”?Midori,LuaKit和Konqueror,对吗?:p
Anko 2012年

14
为什么不只用$('html','body')。animate({scrollTop:0})而不是添加两行呢?
马特·史密斯

23

一个大量 用户建议选择HTML和身体标签为跨浏览器兼容,就像这样:

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

但是,如果您指望回调仅运行一次,则可能会使您绊倒。实际上,它将运行两次,因为您选择了两个元素。

如果您遇到问题,可以执行以下操作:

function scrollToTop(callback) {
    if ($('html').scrollTop()) {
        $('html').animate({ scrollTop: 0 }, callback);
        return;
    }

    $('body').animate({ scrollTop: 0 }, callback);
}

起作用的原因是在Chrome中$('html').scrollTop()返回0,但在其他浏览器(例如Firefox)中则不返回0。

如果不想在滚动条已经位于顶部的情况下等待动画完成,请尝试以下操作:

function scrollToTop(callback) {
    if ($('html').scrollTop()) {
        $('html').animate({ scrollTop: 0 }, callback);
        return;
    }

    if ($('body').scrollTop()) {
        $('body').animate({ scrollTop: 0 }, callback);
        return;
    }

    callback();
}

19

#top可以做到的

document.location.href = "#top";

在FF,IE和Chrome中正常运行


真好!有没有办法使它平滑滚动?
失速

您应避免使用基于导航的解决方案,请参阅有关Sriramajeyam答案的评论。
安德鲁·格罗斯

15

$(".scrolltop").click(function() {
  $("html, body").animate({ scrollTop: 0 }, "slow");
  return false;
});
.section{
 height:400px;
}
.section1{
  background-color: #333;
}
.section2{
  background-color: red;
}
.section3{
  background-color: yellow;
}
.section4{
  background-color: green;
}
.scrolltop{
  position:fixed;
  right:10px;
  bottom:10px;
  color:#fff;
}
<html>
<head>
<title>Scroll top demo</title>
<script src="https://code.jquery.com/jquery-3.3.1.js"></script>
</head>
<body>
<div class="content-wrapper">
<div class="section section1"></div>
<div class="section section2"></div>
<div class="section section3"></div>
<div class="section section4"></div>
<a class="scrolltop">Scroll top</a>
</div>

</body>
</html>


3
尽管此代码可能会回答问题,但提供有关如何以及为什么解决该问题的信息会提高其长期价值
L_J18年

解释你的答案!
Ullas Hunka

在网页中,任何用户都将单击滚动顶部按钮,然后页面将滚动顶部顶部的动画。
arvinda kumar

为什么要用animate()而不是jquery scroll()?
咏琪


14

$(document).scrollTop(0); 也可以。


2
请注意,当您不使用Firefox时,此功能将无效。仅给出一个参数时会出错(错误:参数[nsIDOMWindow.scrollTo]不足)。
赫斯基2012年

14

非jQuery解决方案/纯JavaScript:

document.body.scrollTop = document.documentElement.scrollTop = 0;


10

试试这个代码:

$('html, body').animate({
    scrollTop: $("div").offset().top
}, time);

div =>您要在其中移动滚动的Dom元素。

时间=>毫秒,定义滚动速度。



8

您不需要JQuery。只需调用脚本即可

window.location = '#'

单击“转到顶部”按钮

示例演示:

output.jsbin.com/fakumo#

PS:当您使用诸如angularjs之类的现代库时,请不要使用这种方法。这可能会破坏URL哈希。


9
不幸的是,这不是最佳解决方案,因为在这种情况下,您实际上是在更改位置,而不是滚动页面。如果位置很重要(在使用Angular路由的情况下),这可能会引起问题
Yaroslav Rogoza 2015年

2
@YaroslavRogoza是正确的。尽管它可能在简单的情况下可行,但我不建议您使用此解决方案。位置变得越来越重要,单页应用广泛使用散列来处理导航。在此之后或在基于哈希的导航中添加基于哈希的导航时,您将立即引入一个副作用错误。
安德鲁·格罗斯

8

只需使用此脚本即可滚动到顶部直接。

<script>
$(document).ready(function(){
    $("button").click(function(){
        ($('body').scrollTop(0));
    });
});
</script>


7

如果您不想平滑滚动,则可以在启动后立即作弊并停止平滑滚动动画...就像这样:

   $(document).ready(function() {
      $("a[href='#top']").click(function() {
          $("html, body").animate({ scrollTop: 0 }, "1");              
          $('html, body').stop(true, true);

          //Anything else you want to do in the same action goes here

          return false;                              
      });
  });

我不知道是否推荐/允许,但它可以工作:)

你什么时候用这个?我不确定,但是也许当您想通过一次单击使用Jquery为一件事制作动画,但又要进行另一次没有动画的制作时,呢?即打开页面顶部的滑动式管理员登录面板,然后立即跳到顶部以查看它。


6

动机

这个简单的解决方案可以在本地运行,并且可以平滑滚动到任何位置。

#在我看来,它避免使用锚链接(带有的链接),如果您要链接到某个节,则该链接很有用,但在某些情况下不太舒服,尤其是在指向顶部时,这可能会导致两个不同的URL指向相同位置(http://www.example.orghttp://www.example.org/#)。

在要滚动到的标签上放置一个ID,例如您的第一部分,它回答了这个问题,但是该ID可以放在页面的任何位置。

<body>
  <section id="top">
    <!-- your content -->
  </section>
  <div id="another"><!-- more content --></div>

然后,作为按钮,您可以使用链接,只需使用这样的代码编辑onclick属性。

<a onclick="document.getElementById('top').scrollIntoView({ behavior: 'smooth', block: 'start', inline: 'nearest' })">Click me</a>

其中的参数document.getElementById是单击后要滚动到的标签的ID


谢谢!是一个很好的解决方案
雨果·斯蒂文·拉古纳·鲁达

@HugoStivenLagunaRueda,您好,我在MDN上找到了,因此感谢Mozilla。令人敬畏的是,已经有很多东西被本地支持。我喜欢香草JS。
Gianluca Casati '18


4

您可以像本小提琴中那样尝试使用JS http://jsfiddle.net/5bNmH/1/

在页面页脚中添加“转到顶部”按钮:

<footer>
    <hr />
    <p>Just some basic footer text.</p>
    <!-- Go to top Button -->
    <a href="#" class="go-top">Go Top</a>
</footer>

4
function scrolltop() {

    var offset = 220;
    var duration = 500;

    jQuery(window).scroll(function() {
        if (jQuery(this).scrollTop() > offset) {
            jQuery('#back-to-top').fadeIn(duration);
        } else {
            jQuery('#back-to-top').fadeOut(duration);
        }
    });

    jQuery('#back-to-top').click(function(event) {
        event.preventDefault();
        jQuery('html, body').animate({scrollTop: 0}, duration);
        return false;
    });
}

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.