//这段代码为什么计算到-3的时候停不下?
//是不是没有计算完成啊?
//我觉得是到了浮点数的时候就计算不完成了?
//我的想法是如果在计算49的时候ss小于1的时候就等于1.
//如果在计算-3的时候ss小于-1的时候就等于-1才对吧?
//这个公式是计算一个缓动效果的.就是距离目标会越来越快,
//或者大家谁有更好的公式分享一下?
var arr = [-3,49];
var i=0;
var n=0;
var ss=0;
var timer;
var t;
function aa(target){
if(n == target){
console.log("stop");
clearTimeout(t);
}else{
ss = (target - n) / 2.5;
ss = ss < 1 ?Math.ceil(ss) : Math.floor(ss);
n+=ss;
console.log(n)
t = setTimeout(function(){
aa(target);
},40)
}
}
timer = setInterval(function(){
i++;
if(i == 2){
i=0;
}
aa(arr[i]);
},1000);

解决方案 »

  1.   

    setInterval()这个函数是每间隔多少时间就做一次,需要调用clearInterval()才会停止,你这里没有停止怎么会停下来呢。就一直每隔一秒就调用一次aa()咯。感觉lz这个问题没有必要用了setInterval()还用setTimeout(),二选一即可。
      

  2.   

    这里我写了一个,最后一点特殊情况处理,加速度有变,若要全程加速度不变,则需要先计算距离与通过时间的关系,参考运价速直线运动- -
    var arr = [ -3, 49 ];
    var speed = 1;
    var a = 0.5;//加速度
    var perTime = 0.5;//间隔时间
    var nowPosition = arr[0];
    var timer = setInterval(function() {
    aa();
    }, perTime*1000);
    function aa() {
    if (nowPosition == arr[1]) {
    timer = clearInterval(timer);
    } else {
    console.log('p:' + nowPosition);
    if (nowPosition + speed*perTime >= arr[1]) {
    speed = (arr[1] - nowPosition)/perTime;
    console.log('speed:' + speed);
    nowPosition = arr[1];
    console.log('endP:' + nowPosition);
    } else {
    console.log('speed:' + speed);
    nowPosition += speed*perTime;
    speed += a*perTime;
    }
    }
    }