setTimeout仅在传递字符串

时间:2018-02-13 03:55:33

标签: javascript html css settimeout

所以我试图使用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++;
  }
});

快速解释:

  • 单击“toTop”按钮时触发。
  • 如果yOffset&lt; 100它跳到顶部。否则速度取决于距离顶部的距离和最大值20。
  • for循环将等于起始位置的变量负增量预定的跳跃值,直到起始位置等于0.
  • 使用setTimeout,闰值和递增的计时器滚动窗口。

感谢您提供的任何见解!

0 个答案:

没有答案