所以我试图使用vanilla javascript实现平滑滚动功能。我在这里找到了一个关于堆栈溢出的解决方案,并使其适用于我的情况。我很困惑,因为我现在的解决方案将字符串传递给setTimeout。从我读过的内容来看,最好是传递函数。不幸的是,我不能让它以任何其他方式工作。
调用setTimeout的代码的一小部分如下所示:
setTimeout("window.scrollTo(0, " + leapY + ")", timer * speed);
我试过这样的话:
setTimeout(function() {window.scrollTo(0, leapY)}, timer * speed);
而不是平滑滚动,它会跳转到页面顶部。
在将匿名函数传递给setTimeout时,有什么我缺少的东西吗?
整个平滑滚动代码块如下所示:
toTopButton.addEventListener('click', function () {
var startY = window.pageYOffset;
var stopY = 0;
if (startY < 100) {
scrollTo(0, stopY);
}
var speed = Math.round(startY / 100);
if (speed >= 20) speed = 20;
var step = Math.round(startY / 25);
var leapY = startY - step;
var timer = 0;
for (var i = startY; i > stopY; i -= step) {
setTimeout("window.scrollTo(0, " + leapY + ")", timer * speed);
leapY -= step;
if (leapY < stopY) {
leapY = stopY
};
timer++;
}
});
快速解释:
感谢您提供的任何见解!