此函数应从页面顶部向下滚动到下方215像素,并增加延迟,以便第一个window.scrollTo事件在10ms发生,下一个在20ms等,依此类推。
最后一行应延迟2150毫秒,因此总共需要2秒钟左右。
而是立即立即向下滚动215个像素。
function scrollDown() {
var yFinal=216, delay=0;
for (y=0; y<yFinal; y++) {
delay = delay+10
setTimeout(function() {
window.scrollTo(100,y);
},delay);
}
}
悲伤的脸。为什么?
[编辑:感谢您的帮助!我用它来写这个最终的解决方案,它有点复杂,我在这里提供给任何人都可以窃取。首先会快速滚动,然后缓慢滚动。正是我想要的。通过使用setInterval的setTimeout实例,它可以为您提供对速度曲线的更多控制,因此您可以轻松地使其呈指数级下降]
function showCategory(categoryId)
{
var yInitial=document.body.scrollTop,
yFinal=216,
delay=0;
if (yInitial<yFinal)
{
yInitial=(yFinal-yInitial)/1.3+yInitial;
window.scrollTo(100, yInitial);
for (var yCurrent = yInitial; yCurrent < yFinal; yCurrent+=2)
{
delay += 30;
(function(position)
{
setTimeout(function()
{
window.scrollTo(100, position);
}, delay);
})(yCurrent);
}
}
}
最佳答案
超时并非一次发生,而是按照您期望的时间发生。但是,它们都尝试滚动到由同一y
变量表示的位置,因此,当循环结束时,它们都使用y
的值。
通常的解决方法是引入闭包:
function scrollDown() {
var yFinal = 216,
delay = 0;
for (var y = 0; y < yFinal; y++) {
delay += 10;
(function(position) {
setTimeout(function() {
window.scrollTo(100, position);
}, delay);
})(y);
}
}
(还请注意,您的
y
变量是全局变量:您应使用var
声明它以使其成为本地变量。)