【发布时间】:2021-11-02 15:35:10
【问题描述】:
我正在尝试设置页面上的滚动位置,以便滚动条一直滚动到顶部。
我想我需要这样的东西,但它不起作用:
(function () { alert('hello'); document.body.scrollTop = 0; } ());
有什么想法吗?
【问题讨论】:
标签: javascript
我正在尝试设置页面上的滚动位置,以便滚动条一直滚动到顶部。
我想我需要这样的东西,但它不起作用:
(function () { alert('hello'); document.body.scrollTop = 0; } ());
有什么想法吗?
【问题讨论】:
标签: javascript
你可以使用window.scrollTo(),像这样:
window.scrollTo(0, 0); // values are x,y-offset
【讨论】:
另外值得注意的是window.scrollBy(dx,dy)(ref)
【讨论】:
请注意,如果您想滚动一个元素而不是整个窗口,则元素没有scrollTo 和scrollBy 方法。你应该:
var el = document.getElementById("myel"); // Or whatever method to get the element
// To set the scroll
el.scrollTop = 0;
el.scrollLeft = 0;
// To increment the scroll
el.scrollTop += 100;
el.scrollLeft += 100;
您还可以将window.scrollTo 和window.scrollBy 函数模拟到browsers that don't support it natively 上网页中的所有现有HTML 元素:
Object.defineProperty(HTMLElement.prototype, "scrollTo", {
value: function(x, y) {
el.scrollTop = y;
el.scrollLeft = x;
},
enumerable: false
});
Object.defineProperty(HTMLElement.prototype, "scrollBy", {
value: function(x, y) {
el.scrollTop += y;
el.scrollLeft += x;
},
enumerable: false
});
所以你可以这样做:
var el = document.getElementById("myel"); // Or whatever method to get the element, again
// To set the scroll
el.scrollTo(0, 0);
// To increment the scroll
el.scrollBy(100, 100);
注意:鼓励Object.defineProperty,因为直接向prototype 添加属性是一个坏习惯(当你看到它时:-)。
【讨论】:
...或者只是将body替换为documentElement:
document.documentElement.scrollTop = 0;
【讨论】:
如果要设置document.body的滚动位置,可以使用window.scrollTo()一起滚动整个window;它需要一对坐标 (x,y) 或一个选项对象 - 如果您只想很好地滚动到顶部,请尝试 window.scrollTo({top:0,behavior:'smooth'});。
但是,在某些情况下,您需要滚动一个 元素(而不是整个文档)。对于这种情况,元素还提供了一个使用相同参数的scrollTo() 方法。
document.querySelector('ul#list').scrollTo(0,0);
【讨论】: