我想在运行函数时更改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();
答案 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()就不会执行。