JavaScript scrollTo 方法什么都不做?

IT技术 javascript jquery dom
2021-03-13 19:55:57

所以我绝望地试图获得一些滚动功能来在页面上工作。在运气不佳之后,我决定只停留window.scrollTo(0, 800);在我的页面上,看看是否可以进行任何滚动。什么都不会发生。我有一个可以展开的手风琴,然后我想滚动到其中的特定元素。但是现在我很高兴看到这东西滚动。有人遇到这个吗?

谢谢!

6个回答

如果你有这样的事情:

html, body { height: 100%; overflow:auto; }

如果 body 和 html 的高度定义都为 100% 并且启用了滚动,则 window.scrollTo(和所有派生的滚动机制)不起作用,尽管显示滚动条(用户可以使用),当内容超过那个100%的身高。这是因为您看到的滚动条不是窗口的滚动条,而是正文的滚动条。

解决方案:

html { height: 100%; overflow:auto; }
body { height: 100%; }

我使用 setTimout 解决了这个问题。我正在使用 angularjs 但也许它也可以帮助 vanilla js。

        setTimeout(function () {
            window.scrollTo(0, 300);
        },2);
你救了我主人
2021-04-27 19:55:57
我使用它并工作,但在慢速网络上它不再工作。
2021-05-04 19:55:57
2 毫秒对我不起作用,但 200 毫秒对我有用。谢谢!
2021-05-08 19:55:57

我能够使用 jQuery 方法 animate() 解决这个问题。这是我使用的实现示例:

$('#content').animate({ scrollTop: elementOffset }, 200);

选择器正在获取 ID = "content" 的 div。然后我将 animate 方法应用于其上,并使用 scrollTop 作为选项。第二个参数是以毫秒为单位的动画持续时间。我希望这对其他人有帮助。

@KimStacks 持续时间 0 对我不起作用,但使用 1 确实有效.. 不敢相信这有多难!
2021-04-29 19:55:57
我尝试了其他答案。这也是唯一对我有用的方法。差异是我使用的$('body').animate({ scrollTop: top }, 0);,其中top包含整数 y 坐标的变量在哪里
2021-05-08 19:55:57

有时不仅仅是 CSS 问题,对我来说浏览器是罪魁祸首。我不得不用这个代码解决它:

if ('scrollRestoration' in window.history) {
  window.history.scrollRestoration = 'manual'
}

它让开发人员拥有滚动更改的所有权。在此处阅读更多相关信息

这昨天发生在我身上,因为我有overflow: auto一个 div 是一个孩子到<html><body>

所以我了解到window.scrollTo()为了工作,你必须元素上设置overflow: auto(或其他overflow-y: scroll<html>

我了解到document.body.scrollTo()为了工作,你必须已经overflow开始<body>

我了解到您也可以使用document.querySelector('#some-container').scrollTo().

就我而言,我想window.scrollTo()工作,所以我将溢出 CSS 放在<html>.

我很惊讶这里没有其他答案谈论“确切哪个”元素是可滚动的。根 html 元素必须可滚动window.scrollTo()才能工作。我下游的所有子元素<html>都设置为height: auto.

我的 CSS 是这样的:

html { position: absolute; left: 0; top: 0; right: 0; bottom: 0; overflow: auto; }
body { width: 100%; height: auto; }
#app { width: 100%; height: auto; }