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


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

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

最佳答案

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

step  = step - 0,1;


应该:

step  = step - 0.1;


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


What does a comma do in JavaScript expressions?
When is the comma operator useful?


更新(逗号到点-change之后)

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


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

var newStep = /* calculate new step */
setTimeout("doAutoScrolling("+newStep+")",1);

10-08 16:47