为了账号安全,请及时绑定邮箱和手机立即绑定

在运行时更改SetInterval的间隔

在运行时更改SetInterval的间隔

慕田峪4524236 2019-07-10 14:52:59
在运行时更改SetInterval的间隔我编写了一个javascript函数,它使用setInterval在一定次数的迭代中每十秒操作一个字符串。function timer() {     var section = document.getElementById('txt').value;     var len = section.length;     var rands = new Array();     for (i=0; i<len; i++) {         rands.push(Math.floor(Math.random()*len));     };     var counter = 0     var interval = setInterval(function() {         var letters = section.split('');         for (j=0; j < len; j++) {             if (counter < rands[j]) {                 letters[j] = Math.floor(Math.random()*9);             };         };         document.getElementById('txt').value = letters.join('');         counter++         if (counter > rands.max()) {             clearInterval(interval);         }     }, 100);};与其将间隔设置为特定的数字,我想在每次运行时,根据计数器更新它。因此,与其:var interval = setInterval(function() { ... }, 100);应该是这样的:var interval = setInterval(function() { ... }, 10*counter);不幸的是,这是行不通的。好像“10*计数器”等于0。那么,如何在每次运行匿名函数时调整间隔?
查看完整描述

3 回答

?
一只萌萌小番薯

TA贡献1795条经验 获得超7个赞

使用setTimeout()相反。然后回调将负责触发下一个超时,此时您可以增加或以其他方式操作时间。

编辑

这里有一个通用函数,您可以使用它为任何函数调用应用“减速”超时。

function setDeceleratingTimeout(callback, factor, times){
    var internalCallback = function(tick, counter) {
        return function() {
            if (--tick >= 0) {
                window.setTimeout(internalCallback, ++counter * factor);
                callback();
            }
        }
    }(times, 0);

    window.setTimeout(internalCallback, factor);};// console.log() requires firebug    
    setDeceleratingTimeout(function(){ console.log('hi'); }, 10, 10);setDeceleratingTimeout(function(){ console.log('bye'); }, 100, 10);


查看完整回答
反对 回复 2019-07-10
?
千万里不及你

TA贡献1784条经验 获得超9个赞

您可以使用匿名函数:

var counter = 10;var myFunction = function(){
    clearInterval(interval);
    counter *= 10;
    interval = setInterval(myFunction, counter);}var interval = setInterval(myFunction, counter);

更新:按A.Wolff的建议,使用setTimeout为了避免需要clearInterval.

var counter = 10;var myFunction = function() {
    counter *= 10;
    setTimeout(myFunction, counter);}setTimeout(myFunction, counter);


查看完整回答
反对 回复 2019-07-10
  • 3 回答
  • 0 关注
  • 912 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号