使用JavaScript/jQuery滚动到页面顶部?

Kin*_*tor 1511 javascript scroll

__CODE__在页面上有一个,当按下这个按钮时,__CODE__使用jQuery显示一个隐藏.

如何使用该函数中的JavaScript/jQuery命令滚动到页面顶部?即使滚动条立即跳到顶部也是可取的.我不是在寻找一个平滑的滚动.

dan*_*lmb 2061

如果您不需要更改动画,那么您不需要使用任何特殊插件 - 我只使用本机JavaScript window.scrollTo方法 - 传入0,0会立即将页面滚动到左上角.

window.scrollTo(x-coord, y-coord);
Run Code Online (Sandbox Code Playgroud)

参数

  • x-coord是沿水平轴的像素.
  • y-coord是沿垂直轴的像素.

  • 这就是我的观点,如果您不需要动画平滑滚动,那么您不需要使用jQuery. (172认同)
  • 有趣的是,杰夫的评论是老实说,对于那些只想让事情跨浏览器工作的人,95%的时间应该只使用jQuery.这来自于现在必须编写大量纯JavaScript的人,因为我们无法承受库减慢广告代码的开销:( (22认同)
  • 这个答案与这个问题无关.如果问题是:我应该使用哪些脚本和方法滚动到页面顶部?正确的答案在这里:http://stackoverflow.com/questions/4147112/how-to-jump-to-top-of-browser-page#answer-4147118 (11认同)
  • 滚动到页面底部`window.scrollTo(0,document.body.scrollHeight);` (9认同)
  • 即使您需要动画。`scrollTo` 现在采用选项作为参数: `scrollTo({left: 0, top: 0, behavior: 'smooth'})` 请参阅 [MDN](https://developer.mozilla.org/en-US/docs /Web/API/ScrollToOptions) (3认同)
  • 在Firefox 40和Chrome 44中为我工作(解决米哈伊尔的评论) (2认同)

Mar*_*ino 1314

如果你想要平滑滚动,尝试这样的事情:

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

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

  • scrollTop不是函数,它是window元素的属性 (22认同)
  • "html"和"body"都是浏览器兼容性所必需的,即Chrome v27仅使用"body"滚动而IE8则不滚动.IE8仅使用"html"滚动,但Chrome v27不滚动. (3认同)
  • 这在使用 animate 的完整回调时无法正常工作,因为它会运行两次。 (2认同)
  • @jalchr 实际上,`window.pageYOffset` 将是窗口 e̶l̶e̶m̶e̶n̶t̶ 对象的属性。 (2认同)

meh*_*ood 170

试试这个滚动到顶部

<script>
 $(document).ready(function(){
    $(window).scrollTop(0);
});
</script>
Run Code Online (Sandbox Code Playgroud)


Mat*_*hew 101

你不需要jQuery来做到这一点.一个标准的HTML标签就足够了......

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

<a target="#jump_to_me">Click Here To Destroy The World!</a>
Run Code Online (Sandbox Code Playgroud)

  • 使用"<a href="#">热门</a>"跳转到页面顶部. (38认同)
  • +1如果您需要导航到特定元素而不是顶部,这是很好的. (12认同)
  • 这似乎是处理SPA时最好的方法 (3认同)

Gan*_*ame 91

更流畅的动画解决方案:

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

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

  • 这是最好的答案。如果想要滚动到底部,我们可以使用 document.body.scrollHeight 作为顶部值。 (3认同)
  • 很干净简单,谢谢! (2认同)
  • @FabioMagarelli 它在 Safari 上工作正常,未在 IE 上测试。仅供参考,在 safari 上测试它,打开任何已滚动的页面,并将上述代码复制粘贴到开发人员工具 - &gt;控制台中,它将滚动到已验证的顶部(Safari 版本 13.0.5)。 (2认同)

D.A*_*der 61

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

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


wak*_*neo 40

平滑滚动,纯javascript:

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


M K*_*aei 36

用动画滚动到页面顶部

window.scrollTo({ top: 0, behavior: 'smooth' });
Run Code Online (Sandbox Code Playgroud)


小智 28

<script>

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

在HTML中

<a href="#top">go top</a>
Run Code Online (Sandbox Code Playgroud)


小智 27

如果你想做平滑滚动,请试试这个:

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

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

 window.scrollTo(x-value, y-value);
Run Code Online (Sandbox Code Playgroud)

参数:

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

  • copycat ...看到用户的答案......这只是前2个答案的汇编.... (5认同)

AvL*_*AvL 25

真的很奇怪:这个问题现在已经活跃了五年了,仍然没有香草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)
Run Code Online (Sandbox Code Playgroud)

如果您愿意,可以将其包装在一个函数中并通过该onclick属性调用它.检查这个jsfiddle

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

  • 该问题明确要求提供jQuery解决方案.所以不奇怪 (6认同)
  • 最适合我的解决方案.没有插件,没有笨重的jquery库只是简单的javascript.荣誉 (2认同)

小智 24

因为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);
    });
});
Run Code Online (Sandbox Code Playgroud)

测试了所有3个浏览器,它工作
我正在使用蓝图css
这是当客户点击"立即预订"按钮并且没有选择租赁期间时,慢慢移动到日历所在的顶部并打开指向对话框div 2个字段,3秒后消失

  • "经测试*所有3个浏览器*"?Midori,LuaKit和Konqueror,对吗?:p (45认同)
  • 为什么不做$('html','body').animate({scrollTop:0})而不是添加两行? (14认同)

Kam*_*esh 22

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

编辑:

$('html, body').animate({scrollTop:(scroll_pos)}, 2000);
Run Code Online (Sandbox Code Playgroud)

  • 你确定animate函数中的字符串持续时间有效吗? (4认同)
  • 用括号括起来 0 有什么意义?((0)) 将简单地评估为 0。 (3认同)

Dav*_*edy 22

一个很大 用户推荐跨浏览器兼容性选择HTML和body标签,就像这样:

$('html, body').animate({ scrollTop: 0 }, callback);
Run Code Online (Sandbox Code Playgroud)

如果你指望你的回调只运行一次,这可能会让你失望.它实际上会运行两次因为你选择了两个元素.

如果这对您来说是个问题,您可以这样做:

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

    $('body').animate({ scrollTop: 0 }, callback);
}
Run Code Online (Sandbox Code Playgroud)

这可行的原因是Chrome $('html').scrollTop()返回0,但在Firefox等其他浏览器中则不然.

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

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

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

    callback();
}
Run Code Online (Sandbox Code Playgroud)


pol*_*ata 18

老人#top可以做到这一点

document.location.href = "#top";
Run Code Online (Sandbox Code Playgroud)

适用于FF,IE和Chrome


小智 14

试试这个

<script>
    $(window).scrollTop(100);
</script>
Run Code Online (Sandbox Code Playgroud)


Har*_*san 14

$(document).scrollTop(0); 也有效.

  • 请注意,当您不使用Firefox时,这将无法正常工作.只给出一个参数时出错(错误:参数不够[nsIDOMWindow.scrollTo]). (2认同)

小智 14

$(".scrolltop").click(function() {
  $("html, body").animate({ scrollTop: 0 }, "slow");
  return false;
});
Run Code Online (Sandbox Code Playgroud)
.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;
}
Run Code Online (Sandbox Code Playgroud)
<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>
Run Code Online (Sandbox Code Playgroud)

  • 虽然此代码可以回答这个问题,但提供有关解决问题的方式和原因的信息可以提高其长期价值 (2认同)

tfo*_*ont 13

非jQuery解决方案/纯JavaScript:

document.body.scrollTop = document.documentElement.scrollTop = 0;
Run Code Online (Sandbox Code Playgroud)


Sma*_*lns 12

TypeScript 中的等效解决方案可能如下

   window.scroll({
      top: 0,
      left: 0,
      behavior: 'smooth'
    });
Run Code Online (Sandbox Code Playgroud)

  • 您的代码片段与 TypeScript 无关,并且在 Javascript 中工作得很好。 (4认同)

San*_*adi 11

这将有效:

window.scrollTo(0, 0);

  • 这是最好的答案 (3认同)

Was*_*Ali 10

试试这段代码:

$('html, body').animate({
    scrollTop: $("div").offset().top
}, time);
Run Code Online (Sandbox Code Playgroud)

div => Dom元素,您想要移动滚动.

time =>毫秒,定义滚动的速度.


Sae*_*and 10

纯 JavaScript 解决方案:

function scrollToTop() {
  window.scrollTo({
    top: 0,
    behavior: 'smooth'
});
Run Code Online (Sandbox Code Playgroud)

我在Codepen上写了一个动画解决方案

此外,您可以尝试使用 CSSscroll-behavior: smooth属性的另一种解决方案。

html {
    scroll-behavior: smooth;
}

@media (prefers-reduced-motion: reduce) {
    html {
        scroll-behavior: auto;
    }
}
Run Code Online (Sandbox Code Playgroud)


小智 8

为什么不使用JQuery内置函数scrollTop:

$('html, body').scrollTop(0);//For scrolling to top

$("body").scrollTop($("body")[0].scrollHeight);//For scrolling to bottom
Run Code Online (Sandbox Code Playgroud)

简短而简单!


小智 8

只需使用此脚本滚动到顶部直接.

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


obj*_*ect 8

document.getElementById("elem").scrollIntoView();


Jon*_*ory 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;                              
      });
  });
Run Code Online (Sandbox Code Playgroud)

我不知道是否推荐/允许,但它的工作原理:)

你什么时候用这个?我不确定,但也许当你想用一次点击用Jquery动画一个东西,但做另一个没有动画的东西?即打开页面顶部的滑入式管理员登录面板,并立即跳到顶部查看它.


Sri*_*ran 7

你不需要JQuery.只需你可以调用脚本

window.location = '#'
Run Code Online (Sandbox Code Playgroud)

点击"转到顶部"按钮

示例演示:

output.jsbin.com/fakumo#

PS:当你使用像angularjs这样的现代库时,不要使用这种方法.这可能会破坏URL hashbang.

  • 不幸的是,它不是最好的解决方案,因为你在这种情况下物理上改变位置而不是滚动页面.如果位置很重要,这可能会导致问题(如果使用Angular路由等) (8认同)
  • @YaroslavRogoza是对的.虽然**可能*在简单的情况下工作,但我不建议使用此解决方案.位置变得越来越重要,单页应用程序广泛使用哈希来处理导航.当在此之后添加基于散列的导航或基于散列的导航时,您会立即引入副作用错误. (2认同)

Ahm*_*azi 7

使用纯Javascript平滑滚动,无需jQuery

// Get the btn
let topBtn = document.querySelector('.top-btn')

// On Click, Scroll to the page's top
topBtn.onclick = () => window.scrollTo({ top: 0, behavior: 'smooth'}) // Remove behavior: 'smooth' if you don't want smooth scrolling

// On scroll, Show/Hide the btn
window.onscroll = () => window.scrollY > 500 ? topBtn.style.display = 'block' : topBtn.style.display = 'none'
Run Code Online (Sandbox Code Playgroud)
body {
  background-color: #111;
  height:5000px;
}


.top-btn {
  all:unset;
  position: fixed;
  right: 20px;
  bottom: 20px;
  cursor: pointer;
  font: bold 2rem monospace;
  color:white;
  display: none;
}
Run Code Online (Sandbox Code Playgroud)
<button class="top-btn"></button>
Run Code Online (Sandbox Code Playgroud)


Gia*_*ati 6

动机

这个简单的解决方案可以原生工作,并实现平滑滚动到任何位置.

它避免使用锚链接(那些#),在我看来,如果你想链接到一个部分,但在某些情况下不太舒服,特别是当指向顶部时可能导致两个不同的URL指向相同的位置(http://www.example.orghttp://www.example.org/#).

id添加到要滚动到的标记中,例如您的第一部分,它会回答此问题,但ID可以放在页面的任何位置.

<body>
  <section id="top">
    <!-- your content -->
  </section>
  <div id="another"><!-- more content --></div>
Run Code Online (Sandbox Code Playgroud)

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

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

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


Sco*_*ttE 5

您可以简单地使用链接中的目标,例如#someid,其中#someid是div的id.

或者,您可以使用任何数量的滚动插件,使其更优雅.

http://plugins.jquery.com/project/ScrollTo就是一个例子.


jea*_*sti 5

上述答案均不适用于 SharePoint 2016。

必须这样做: https: //sharepoint.stackexchange.com/questions/195870/

var w = document.getElementById("s4-workspace");
w.scrollTop = 0;
Run Code Online (Sandbox Code Playgroud)


Jus*_*Liu 5

您可以使用 javascript 的内置函数scrollTo

function scroll() {
  window.scrollTo({
    top: 0,
    behavior: 'smooth'
  });
}
Run Code Online (Sandbox Code Playgroud)
<button onclick="scroll">Scroll</button>
Run Code Online (Sandbox Code Playgroud)