平滑滚动到顶部

IT技术 javascript
2021-02-27 17:07:49

我已经搜索了几个小时,但没有解决方案。我想要平滑滚动到页面顶部。我已经平滑滚动到页面中的单独锚点,.js文件附加到我的网站,但我不能在顶部使用锚点,因为我使用的是来自免费托管网站的模板,内置页面构建工具不允许我在身体区域上方进行编辑。

是我获得平滑滚动的地方。我一直在尝试设置“smoothly-scroll-to-an-element-without-a-jquery-plugin”,但经过无数次尝试后,我不知道如何明显地安排它。我也用过,window.scrollTo(0, 0);但它会立即滚动。谢谢!

另外: http://jsfiddle.net/WFd3V/ -代码很可能是标签class="smoothScroll",因为我的其他元素的使用,但我不知道如何将它与混合href="javascript:window.scrollTo(0,0);",或其他任何将带给页面没有锚的顶部。

6个回答

我认为最简单的解决方案是:

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

如果您想要即时滚动,则只需使用:

window.scrollTo({top: 0});

可以用作函数:

// Scroll To Top

function scrollToTop() {

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

}

或者作为一个 onclick 处理程序:

<button onclick='window.scrollTo({top: 0, behavior: "smooth"});'>Scroll to Top</button>
不是全部。IE 11 及更低版本不支持,Safari 或 Safari iOS 不支持。在此处查看完整列表。caniuse.com/#feat=css-scroll-behavior
2021-04-26 17:07:49
@IvicaPesovski 你可能没有把你的论点放在一个对象中。scrollTo想要只有一个参数,即数字或对象。如果选择传递对象,则可以指定behavior. 这个解决方案在 Chrome / Electron 上对我来说很好用。
2021-04-27 17:07:49
这也不适用于 Chrome。它会触发一个错误,即 ScrollTo 需要 2 个参数并且只传递了 1 个参数。我使用 jQuery 修复了它,并且:$('html, body').animate({scrollTop:0},'50');
2021-05-16 17:07:49

这是我用 ES6 实现的建议

const scrollToTop = () => {
  const c = document.documentElement.scrollTop || document.body.scrollTop;
  if (c > 0) {
    window.requestAnimationFrame(scrollToTop);
    window.scrollTo(0, c - c / 8);
  }
};
scrollToTop();

提示:对于较慢的滚动动作,请增加硬编码数字8数字越大 - 滚动越平滑/越慢。

效果不错但与CSS规则冲突的脚本,scroll-behavior: smooth必须在脚本运行期间禁用CSS规则。
2021-04-28 17:07:49
是的,如@Solhan 所述,在 IE 中,解决方案无法正常工作。sohan 给出的解决方案对我也不起作用。有没有其他解决方案可以在 IE 中正常工作?
2021-05-08 17:07:49
最干净的解决方案是使用window.scrollTo({ top: 0, behavior: 'smooth' })添加smoothscroll- polyfill @AkankshaMohanty
2021-05-09 17:07:49
很好的解决方案谢谢。但是在 IE11 中,scrollTop 值不会低于 8/2,如果再次向下滚动,它会继续向上滚动,我做了一些更改并添加了以下几行:const smoothness = 8; let val = s - s / smoothness; if (val < smoothness) val = 0; window.scrollTo(0, val);问题消失了,但由于val = 0;
2021-05-20 17:07:49
window.scroll({top: 0, behavior: "smooth"})

只需使用这段代码,它就会完美运行,您可以将其包装到方法或事件中。

仅纯 Javascript

var t1 = 0;
window.onscroll = scroll1;

function scroll1() {
  var toTop = document.getElementById('toTop');
  window.scrollY > 0 ? toTop.style.display = 'Block' : toTop.style.display = 'none';
}

function abcd() {
  var y1 = window.scrollY;
  y1 = y1 - 1000;
  window.scrollTo(0, y1);
  if (y1 > 0) {
    t1 = setTimeout("abcd()", 100);
  } else {
    clearTimeout(t1);
  }
}
#toTop {
  display: block;
  position: fixed;
  bottom: 20px;
  right: 20px;
  font-size: 48px;
}

#toTop {
  transition: all 0.5s ease 0s;
  -moz-transition: all 0.5s ease 0s;
  -webkit-transition: all 0.5s ease 0s;
  -o-transition: all 0.5s ease 0s;
  opacity: 0.5;
  display: none;
  cursor: pointer;
}

#toTop:hover {
  opacity: 1;
}
<p>your text here</p>
<img id="toTop" src="http://via.placeholder.com/50x50" onclick="abcd()" title="Go To Top">

似乎对我不起作用。已将文本添加到“您的文本此处”部分。该按钮将您跳回到顶部
2021-04-25 17:07:49
@hemnathmouli 谢谢
2021-05-01 17:07:49
@ user2840467 工作正常。我检查了 chrome 和 mozilla。能否请您详细描述一下您的问题。
2021-05-05 17:07:49
:* 这太棒了
2021-05-06 17:07:49

您应该开始使用 jQuery 或其他一些 js 库。它比 js 容易得多,你可以将它用作大多数 js 的简写,而不是实际上很长的、绘制出来的 js。

简单地将<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>(或任何最新的谷歌 CDN 是https://developers.google.com/speed/libraries/devguide#jquery)放在您的<head>.

然后,在您的event代码中(如果您使用 jQuery 会更容易:$.click()对于按钮、$.change()复选框、选择、单选...),将第二个链接中的代码看起来更像

$('#theIDofTheButtonThatTriggersThisAnimation').click(function(){
    $('#theIDofTheElementYouWantToSmoothlyScroll').animate({
        scrollTop: 0
    }, 2000);
});

但是,如果您正在尝试制作动画,我建议您查看一些基本的 css 属性,例如position:absoluteposition:relative避免发疯。


我仍然不太确定您的代码中发生了什么,因为相对于现在使用 css 和 jQuery 的处理方式而言,它非常不标准。我会把它分解成一些简单的东西来学习一般概念。

对于您的示例,您应该基于我的动画示例,我是如何学习的:https : //stackoverflow.com/a/12906254/1382306

我认为您正在尝试根据$.click(). 在我的答案中的小提琴中,它向左和向右滑动。您可以使用 csstop属性而不是left.

一旦你弄清楚如何上下移动整个div,你就可以制作一个relative容器来容纳所有的内容absolute divs 并div通过设置它们的tops 来循环操作所有内容s。这里有一个快速入门absoluterelativehttp://css-tricks.com/absolute-positioning-inside-relative-positioning/

我所有的动画都有relative容器和absolute内容。这就是我制作自定义 gridview 插件的方式,该插件可以立即压缩整个数据库。

此外,在div动画方面确实没有过度使用s 。试图让 1div做所有事情是一场噩梦。

试试看你能不能把我的小提琴重新格式化成垂直滑出。一旦你做到这一点,研究absoluterelative一点点。如果您有更多问题,请再问一个问题。

将您的想法转变为这些哲学,您将开始快速浏览此类编码。

抱歉造成混乱,但我不应该将菜单栏与它一起发布,因为它也包含自己的 css 和 java 代码。在我的小提琴中唯一重要的是两个<sript src<a class="smoothScroll". 也许我应该打开一个新的问题页面。
2021-05-03 17:07:49
如果你已经有 jQuery,那么就做 $("body").animate({scrollTop:0});
2021-05-05 17:07:49
首先,我不知道如何使用 jQuery 和 javascript - 这是第二个链接中的代码,我认为只要我可以将它连接到 <a href> 超链接,它就会起作用。$('html, body').animate({ scrollTop: $("#elementID").offset().top }, 2000);
2021-05-10 17:07:49
哦,我收回那句话,我意识到它也链接到一个元素,这可能需要一个锚点。
2021-05-13 17:07:49
一直在尝试数百种变化,但似乎没有什么能满足我的需求。我想我会把它链接到我可以编辑的正文的顶部
2021-05-15 17:07:49