javascript - setInterval 未按预期工作

标签 javascript

function startAutoScrolling() {

     var distance = y2 - y1;
     var speed = distance / dateDiff;

     interval1 = setInterval(function() { doAutoScrolling(speed); }, 1); 

}

这里我想减少步长0.1 但它不是那样工作的,我不知道为什么

function doAutoScrolling(step) {

     document.getElementById(CONTEINER).scrollTop += step;

     if (isGoingDown) {
          step  = step - 0.1;
          console.log("step - 1: " + step); 
          if (step <= 0) {
               clearInterval(interval1); 
          }
     } else  {   // there is continue below

这里我想增加步骤,如果条件必须停止 block 的执行 但它也不起作用

          step += 0.01;
          if (step >= 0) {
               clearInterval(interval1); 
          }
     } 
}

最佳答案

您在最可能想要使用小数的地方使用了 Javascript 逗号运算符,例如:

step  = step - 0,1;

应该是:

step  = step - 0.1;

有关逗号运算符的更多信息:

更新(逗号后更改为点)

原语在 Javascript 中是按值传递的(请参阅: Does Javascript pass by reference? ),因此您基本上是用相同的值( speed< 的值)一遍又一遍地调用 doAutoScrolling/)。您需要执行以下操作之一:

  • speed 包裹在对象中以便通过引用传递
  • speed 设置为全局变量,或者至少在 doAutoScrolling 的父上下文中定义
  • setInterval 替换为 setTimeout 并在 doAutoScrolling 中设置新的超时:

    var newStep =/* 计算新步数 */ setTimeout("doAutoScrolling("+newStep+")",1);

关于javascript - setInterval 未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25659614/

相关文章:

Javascript 调用改变类型

javascript - 使用非常非常大的位标志(除了内存)有什么缺点吗?

javascript - HTML5 文件 API readAsBinaryString 读取的文件比磁盘上的文件大得多

javascript - 阻止 url 直接访问 index.php,除非用户单击另一个特定 html 文件(例如 index.html)上的链接

javascript - 函数内的函数,如何退出主函数

javascript - 来自 jquery 注册的纯 JavaScript 的调用事件

javascript - 使用 Selenium 和 PhantomJS 测试 AngularJS 应用程序

javascript - 使用我的自定义弹出窗口覆盖 onbeforeunload 弹出窗口

javascript - 根据包含索引的数组从数组中获取元素

javascript - _.each 的回调函数?