gpt4 book ai didi

Javascript ScrollTo 在页面加载时不起作用

转载 作者:行者123 更新时间:2023-11-28 20:25:39 26 4
gpt4 key购买 nike

我有一个问题,我想在页面渲染后通过调用 window.scrollTo() 将页面滚动到特定元素。但不起作用。有什么限制吗?

var step = Math.round(distance / 25); // distance is Stop-start
var leapY = stopY > startY ? startY + step : startY - step;
var timer = 0;
if (stopY > startY) {
for (var i = startY; i < stopY; i += step) {
setTimeout(window.scrollTo(0,leapY), timer * speed);
leapY += step;
if (leapY > stopY)
leapY = stopY;
timer++;
}
}

最佳答案

这一行:

setTimeout(window.scrollTo(0,leapY), timer * speed);

立即调用window.scrollTo并将其返回值传递给setTimeout,就像foo(bar())一样code> 立即调用 bar 并将其返回值传递给 foo

您需要传入一个函数:

setTimeout(function() { window.scrollTo(0,leapY); }, timer * speed);

但仅此还不够,因为函数将在运行时查看 leapY 值,而不是定义时的值,因此它们'所有最终都会使用leapY的最后一个值。所以你需要一个构建器函数:

setTimeout(buildScroller(leapY), timer * speed);

function buildScroller(y) {
return function() { window.scrollTo(0,y); };
}

在循环中,我们调用传入 leapY 作为 y 参数的构建器,它返回一个关闭该参数的函数(而不是 leapY)。该参数不会改变,因此它构建的函数使用正确的值。

<小时/>

Live Example | Live Source

<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8 />
<title>Scrolling On Load In Loop</title>
<style>
div {
height: 200px;
}
</style>
</head>
<body>
<div>Scrolls to each of the first four followingdivs at intervals of one second</div>
<div>0x100</div>
<div>0x200</div>
<div>0x300</div>
<div>0x400</div>
<div>0x500</div>
<div>0x600</div>
<div>0x700</div>
<div>0x800</div>
<div>0x900</div>
<div>0x1000</div>
<div>0x1100</div>
<div>0x1200</div>
<div>0x1300</div>
<div>0x1400</div>
<script>
(function() {
var leapY;

for (leapY = 1; leapY <= 4; ++leapY) {
setTimeout(buildScroller(leapY * 200), leapY * 1000);
}

function buildScroller(y) {
return function() { window.scrollTo(0,y); };
}
})();
</script>
</body>
</html>

关于Javascript ScrollTo 在页面加载时不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17464042/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com