如何在没有动画的情况下滚动到

Und*_*ble 1 html javascript css jquery scroll

所以我使用了来自lions-mark的优秀插件,它允许轻而易举地滚动到任何位置。我主要使用它来在页面刷新时将用户保持在他当前的滚动位置(不要问,我的是一个在某些情况下具有自动刷新功能的传统游戏网站)

所以我将当前滚动位置存储到 localstorage onwindow.onBeforeUnload并使用该值在页面加载后滚动到上一个位置。

$('content-grid').scrollTo(offsetBeforeReload);

这是有效的,但是我想在没有动画滚动的情况下“跳”到那个位置。我不想使用锚点,因为我已经有了这个可以正常工作的 scrollTo 代码,我想做的就是去掉 scrollTo 动画,让它看起来好像页面“锚定”到那个位置。

非常感谢任何建议/解决方案!

Wor*_*red 18

这是我需要的:

window.scrollTo({ top:50, left:0, behavior: "instant"})


Dex*_*spi 8

我能够实现这一点的方式(在我的例子中:在通过Vue Router转换到新视图时抑制滚动动画到顶部:

  mounted() {
    document.documentElement.style.scrollBehavior = 'auto';
    setTimeout(() => window.scrollTo(0, 0), 5);
    setTimeout(() => document.documentElement.style.scrollBehavior = 'smooth', 5);
  }
Run Code Online (Sandbox Code Playgroud)

这允许您更改节点style的属性html...从 切换scroll到 来auto停止它,然后scroll在滚动完成后返回到 。这setTimeout()实际上很重要,否则切换auto实际上不会生效。

请注意,即使您html最初在 css 中将 set 设置为平滑滚动,这仍然有效:

html {
    scroll-behavior: smooth;
}
Run Code Online (Sandbox Code Playgroud)

我在 MacOS(Big Sur)上的 Chrome 和 Firefox 上尝试过这个,它们似乎有效。

这也应该可以在不使用 Vue.js 的情况下工作。

  • 这应该是正确的答案 (2认同)

Mik*_*uck 5

只需使用window.scrollTo. 这将直接跳转到没有动画的位置。

var xPosition = 0;
var yPosition = 1000;
window.scrollTo(xPosition, yPosition);
Run Code Online (Sandbox Code Playgroud)

  • CSS 属性 `scroll-behavior: smooth` 无论如何都会引入滚动动画/平滑度。 (2认同)
  • 这并不完全正确。正如@undefined所说,“scroll-behavior: smooth”将为滚动设置动画。 (2认同)

Tur*_*nip 3

您可以设置应立即滚动到元素的duration选项。0

$('content-grid').scrollTo(offsetBeforeReload, {duration:0});
Run Code Online (Sandbox Code Playgroud)

这是来自 lions-mark 网站的演示,已更新为使用零持续时间:JSFiddle