ChatGPT解决这个技术问题 Extra ChatGPT

使用 JavaScript 滚动到页面顶部?

如何使用 JavaScript 滚动到页面顶部?滚动条立即跳到页面顶部也是可取的,因为我不希望实现平滑滚动。

2019年,为避免“本站出现使用滚动链接定位效果。这可能不适用于异步平移”使用我的脚本 stackoverflow.com/a/57641938/5781320
所以应该删除 jQuery 答案。

C
Calinou

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

window.scrollTo(xCoord, yCoord);

参数

xCoord 是沿水平轴的像素。

yCoord 是沿垂直轴的像素。


这就是我的观点,如果您不需要动画平滑滚动,那么您不需要使用 jQuery。
有趣的是,杰夫的评论老实说对于那些只想让事情在 95% 的时间跨浏览器工作的人应该只使用 jQuery。这是来自现在必须编写大量纯 javascript 的人,因为我们无法承担图书馆减慢广告代码的开销:(
这个答案与问题无关。如果问题是:我应该使用什么脚本和方法滚动到页面顶部?正确答案在这里:stackoverflow.com/questions/4147112/…
在 Firefox 40 和 Chrome 44 中为我工作(解决 Mikhail 的评论)
滚动到页面底部 window.scrollTo(0, document.body.scrollHeight);
M
Mark Ursino

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

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

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


+1。我只是想知道如何做这样的事情,谷歌把我带到这里。问题虽然,文档中的“scrollTop”功能在哪里?我只是看了一下,但找不到。
scrollTop 不是函数,它是窗口元素的属性
这在使用 animate 的完整回调时无法正常工作,因为它会运行两次。
浏览器兼容性都需要“html”和“body”,即 Chrome v27 仅使用“body”滚动,而 IE8 则没有。 IE8 仅使用“html”滚动,但 Chrome v27 没有。
@jalchr 实际上,window.pageYOffset 将是窗口 e̶l̶e̶m̶e̶n̶t̶ 对象的属性。
G
Ganesh Ghalame

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

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

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


您可能仍需要填充对 ScrollOptions 的支持(对于某些浏览器):github.com/iamdustan/smoothscroll
我非常喜欢这个解决方案。
@FabioMagarelli 它在 Safari 上运行良好,未在 IE 上测试。仅供参考,在 safari 上测试它打开任何具有滚动和复制粘贴以上代码的页面在开发者工具 - > 控制台它将滚动到顶部验证(Safari 版本 13.0.5)。
这是最好的答案。如果想要滚动到底部,我们可以使用 document.body.scrollHeight 作为顶部值。
太棒了,你大人Ganesh
A
Anup

试试这个在顶部滚动

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

这是一样的: if ('scrollRestoration' in history) { history.scrollRestoration = 'manual'; }
谁知道就这么简单!谢谢 :)
M
Mathew

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

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

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

+1如果您需要导航到特定元素而不是仅导航到顶部,这很好。
使用 'Top' 跳转到页面顶部。
这似乎是处理 SPA 时的最佳方式
好的!有没有办法让它平滑滚动?
如果您在页面中间使用 getElementById 调用另一个按钮,这将不起作用。
D
Dalex

所有这些建议都适用于各种情况。对于那些通过搜索找到此页面的人,也可以尝试一下this。 JQuery,没有插件,滚动到元素。

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

w
wake-up-neo

平滑滚动,纯javascript:

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

K
Kamlesh Kumar
<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' });

你确定持续时间作为动画函数中的字符串有效吗?
您不能在 animate 函数中使用字符串作为持续时间,而应使用:$('html, body').animate({scrollTop:(scroll_pos)}, 2000);
用括号括起来 0 有什么意义? ((0)) 将简单地评估为 0。
是的@Jack,你可以。
A
AvL

真的很奇怪:这个问题已经存在五年了,仍然没有原生的 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


不过,这个问题明确要求使用 jQuery 解决方案。所以并不奇怪
对我来说最好的解决方案。没有插件,没有庞大的 jquery 库,只有简单的 javascript。荣誉
伙计,我在 5 年后也创建了同样的逻辑 XD,完全一样的逻辑,只是值不同,比如间隔时间和我们用来减去的那个整数,简直不敢相信 XD。 TBH,来这里是为了回答,但它已经在那里了,所以你的回答很赞成。
h
hasancse016
<script>

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

在 HTML 中

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

G
Gaurang Sondagar

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

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

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

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

参数 :

值是沿水平轴的像素。

y 值是沿垂直轴的像素。


抄袭...查看用户答案...这只是前 2 个答案的汇编...。
这是使用 stackoverflow 的一种合法方式——将它放在一个地方更实用。 Joel Spolsky 使用重复使用现有答案作为 stackoverflow 应该如何在某一时刻工作的示例。如果您有兴趣,我可以尝试找到博客文章
应该提到你的第一个解决方案需要 jQuery。
J
Jamie

使用 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 中不起作用。
身体动画在 Safari 中确实有效,因此我正在相应地更新您的答案。
“测试了所有 3 个浏览器”? Midori、LuaKit 和 Konqueror,对吗? :p
为什么不只是做 $('html', 'body').animate({scrollTop:0}) 而不是添加两行?
C
Community

lot of users 建议同时选择 html 和 body 标签以实现跨浏览器兼容性,如下所示:

$('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 等其他浏览器中则不然。

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

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

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

    callback();
}

p
pollirrata

旧的 #top 可以解决问题

document.location.href = "#top";

在 FF、IE 和 Chrome 中运行良好


好的!有没有办法让它平滑滚动?
您应该避免基于导航的解决方案,请参阅有关 Sriramajeyam 答案的评论。
a
arvinda kumar

$(".scrolltop").click(function() { $("html, body").animate({ scrollTop: 0 }, "slow"); return false; }); .section{ 高度:400px; } .section1{ 背景颜色:#333; } .section2{ 背景颜色:红色; } .section3{ 背景颜色:黄色; } .section4{ 背景颜色:绿色; } .scrolltop{ 位置:固定;右:10px;底部:10px;颜色:#fff; } 滚动顶部演示 <正文>


虽然此代码可能会回答问题,但提供有关其解决问题的方式和原因的信息可提高其长期价值
解释你的答案!
在网页中,任何用户都将单击滚动顶部按钮,然后页面将滚动顶部并带有动画。
为什么 animate() 而不是 jquery scroll()?
他说的是真的,我相信这是一个很好的答案,因为那个版本的 jQuery 已经支持滚动..如果你打开 JS 文件,你会在那里找到解释..只需要定位类 // Create scrollLeft 和 scrollTop 方法 jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( method, prop ) {
A
Ahmad Moghazi

使用 vanilla Javascript 平滑滚动和动画,无需 jQuery

// 获取元素 let topBtn = document.querySelector(".top-btn"); // 点击时,滚动到页面顶部,如果不想平滑滚动,请将 'smooth' 替换为 'auto' topBtn.onclick = () => window.scrollTo({ top: 0, behavior: "smooth" } ); // 在滚动时,使用动画显示/隐藏 btn window.onscroll = () => window.scrollY > 500 ? topBtn.style.opacity = 1:topBtn.style.opacity = 0 body { 背景颜色:#111;高度:5000px; } .top-btn { 全部:未设置;位置:固定;右:20px;底部:20px;光标:指针;变换:比例(1.8);不透明度:0;过渡:.3s; }


t
tfont

非 jQuery 解决方案/纯 JavaScript:

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

S
Smaillns

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

   window.scroll({
      top: 0,
      left: 0,
      behavior: 'smooth'
    });

您的代码段与 TypeScript 无关,并且在 Javascript 中运行良好。
您的代码完美运行
H
Hari Ganesan

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


请注意,当您不使用 Firefox 时,这将不起作用。只给出一个参数时会出现错误(错误:没有足够的参数 [nsIDOMWindow.scrollTo])。
S
Santosh Jadi

这将起作用:

window.scrollTo(0, 0);


这是最好的答案
a
animuson

尝试这个

<script>
    $(window).scrollTop(100);
</script>

S
Saeed Hassanvand

纯 JavaScript 解决方案:

function scrollToTop() {
  window.scrollTo({
    top: 0,
    behavior: 'smooth'
});

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

此外,您可以尝试使用 CSS scroll-behavior: smooth 属性的其他解决方案。

html {
    scroll-behavior: smooth;
}

@media (prefers-reduced-motion: reduce) {
    html {
        scroll-behavior: auto;
    }
}

W
Wasif Ali

试试这个代码:

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

div => 要移动滚动的 Dom 元素。

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


S
Sandeep Gantait

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

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

$("body").scrollTop($("body")[0].scrollHeight);//For scrolling to bottom

简短而简单!


您只是缺少链接 to the doc
S
Sriram

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

window.location = '#'

单击“转到顶部”按钮

示例演示:

output.jsbin.com/fakumo#

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


不幸的是,这不是最好的解决方案,因为在这种情况下您是在物理上更改位置而不是滚动页面。如果位置很重要,这可能会导致问题(在使用 Angular 路由的情况下)
@YaroslavRogoza 是正确的。虽然它可能适用于简单的情况,但我不推荐这种解决方案。位置变得越来越重要,单页应用程序广泛使用哈希来处理导航。在此之后添加基于散列的导航时,您将立即引入一个副作用错误,或者将此添加到基于散列的导航。
G
Gianluca Casati

动机

这个简单的解决方案本机工作并实现到任何位置的平滑滚动。

它避免使用锚链接(那些带有 # 的),在我看来,如果您想链接到某个部分,这很有用,但在某些情况下不太舒服,特别是在指向顶部时可能会导致两个不同的 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。
M
M Komaei

滚动到带有动画的页面顶部:

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

n
nicholeous

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

   $(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 为一件事制作动画,但在没有动画的情况下做另一件事?即在页面顶部打开一个滑入式管理登录面板,然后立即跳转到顶部查看它。


G
Gayashan Perera

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

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

C
Community

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

函数滚动(){ window.scrollTo({顶部:0,行为:'平滑'}); }


这很有帮助,谢谢。