为什么像"scrollY"这样的窗口属性在分配后不会自动更新?



所以我在玩javascript窗口属性,并尝试覆盖window.scrollY属性,我注意到在运行window.scrollY = 123后,即使在滚动后,它也会保持在123值,并且不会随着滚动位置而更新。

我知道有像window.scrollTo这样的特殊方法来设置滚动位置,但我只是觉得这是有线的。

您可以在对象中重现这样的行为,如果没有显式设置属性,则会返回一些计算值。但当它被设置时,它会返回设置的值。

所以,虽然你看到的看起来很奇怪,但这实际上只是因为用户从未打算设置window.scrollY,一旦设置了它,在尝试检索时,值就不会改变

window.scrollTo(0,300)// set scrollY to 300 with proper setter
const fakeWindow = new Proxy({}, {
get: function(target, name) {
if (!(name in target) && name === 'scrollY') {
console.log('Returning callculated')
return window.scrollY;

}
console.log('Returning user set value')
return target[name];
}
});
console.log("[before set]" + fakeWindow.scrollY);
fakeWindow.scrollY = 5500;
console.log("[after set] " + fakeWindow.scrollY);
console.log('Actual window.scrollY=', window.scrollY)
<div style="height:2000px"></div>

相关内容

最新更新