setTimeout在运行期间更改速度

时间:2015-02-09 23:02:11

标签: javascript settimeout

我想在运行函数时更改setTimeout速度。

我想即将到来,我的剧本仍有一些问题。但我无法弄清楚是什么。

有人可以帮助我吗?

$('input[type="range"]').rangeslider({
        polyfill: false,
        onInit: function() {
        this.update();
    },
        onSlide: function(pos, value) {
        tempPosition = pos + this.grabX;
        position = (tempPosition <= this.handleWidth) ? this.handleWidth : (tempPosition >= this.maxHandleX) ? this.maxHandleX : tempPosition;
        //timer = setTimeout(counter, value);
        //clearTimeout(timer);
        //var speed = value;
        //clearTimeout(timer);
        var timer = 0;
        timer.length = 0;
        timer = setTimeout(counter, value);
        clearTimeout(timer);
        document.getElementById("demo").innerHTML = timer;


        //alert(counter);
    }
    });

    var counter = function() {
    imagesArray[i].setOpacity(0.00);
    i++;
    if(i > 23){
        i = imagesArray.length - 23;
    }
    imagesArray[i].setOpacity(0.60);
    speed = parseInt(speed);
    setTimeout(counter, speed);
    document.getElementById("test").innerHTML = speed;
    };

    counter();

1 个答案:

答案 0 :(得分:1)

首先,我会尝试指出代码中的一些问题在onSlide回调中,你有:

var timer = 0;
timer.length = 0;
timer = setTimeout(counter, value);
clearTimeout(timer);

因此,每次使用滑块时,都会将局部变量timer初始化为0.您永远不会使用此值,因此这没有意义。事实上,这足以打破你的逻辑,但也存在其他问题。然后,您尝试将length的{​​{1}}属性设置为0.当然这必然会导致运行时错误?数字没有timer属性。然后为length分配timer返回的id,这很好,但是,您立即清除超时,防止计划的setTimeout()调用被执行。

另一方面,counter()函数使用counter调用自身,但未捕获返回的ID,这意味着无论您在onSlide回调中执行什么操作,都会执行此调度调用

然后我看不到setTimeout变量的定义或设置位置。

基本上,代码中存在太多问题,无法在答案范围内完成所有这些问题。一个合理的方法可能看起来像这样:

speed

值得注意的是,使用这种方法,只要在超时之前调整滑块,counter()就不会执行。

相关问题