当前位置: 首页 > 知识库问答 >
问题:

为循环设置间隔和清除内部间隔

亢仰岳
2023-03-14

我在for循环中有一个set interval函数,当它在set interval函数中时,如果它满足条件,就会发出警报并清除间隔。下面是我的代码,但它不工作。谁能告诉我这里的错误是什么。

var timeCheck = 0;
function matchTime() {
    for (var i=0;i<timers.length;i++) {
        timeCheck = setInterval(function () {
            var theDate = new Date(timers[i][0]*1000); 
            var now = new Date(); 
            if ( (now.getFullYear() === theDate.getFullYear()) && (now.getMonth() === theDate.getMonth()) ) {
                if ( (now.getDate() === theDate.getDate()) && (now.getHours() === theDate.getHours()) ) {
                    if ( now.getMinutes() === theDate.getMinutes() && (now.getSeconds() === theDate.getSeconds()) ) { alert("its Time for "+timers[i][1]); stopCheck(); }
                }
            }
        }, 10);
    }
}

function stopCheck() { clearInterval(timeCheck); }

谢谢

我试图解决的是:当本地时间与定时器数组中的时间匹配时,我需要每次获得警报(第0列;定时器[计数][0])。数组已经排序
timers.sort(函数(a, b){返回a[0]-b[0]; });

共有2个答案

诸超
2023-03-14

也许:

var timeCheck = {};
function matchTime() {
   for (var i=0;i<timers.length;i++) {
      timeCheck[i] = setInterval(function () {
        var theDate = new Date(timers[i][0]*1000); 
        var now = new Date(); 
        if ( (now.getFullYear() === theDate.getFullYear()) && (now.getMonth() === theDate.getMonth()) ) {
            if ( (now.getDate() === theDate.getDate()) && (now.getHours() === theDate.getHours()) ) {
                if ( now.getMinutes() === theDate.getMinutes() && (now.getSeconds() === theDate.getSeconds()) ) { alert("its Time for "+timers[i][1]); stopCheck(i); }
            }
        }
    }, 10);
    }
}

 function stopCheck(i) { clearInterval(timeCheck[i]); }

或许:

var timeCheck = 0;
function matchTime() {
  var timeCheck = setInterval(function () {
    for (var i=0;i<timers.length;i++) {
        var theDate = new Date(timers[i][0]*1000); 
        var now = new Date(); 
        if ( (now.getFullYear() === theDate.getFullYear()) && (now.getMonth() === theDate.getMonth()) ) {
            if ( (now.getDate() === theDate.getDate()) && (now.getHours() === theDate.getHours()) ) {
                if ( now.getMinutes() === theDate.getMinutes() && (now.getSeconds() === theDate.getSeconds()) ) { alert("its Time for "+timers[i][1]); stopCheck(i); }
            }
        }
    }
   }, 10);
}

 function stopCheck(i) { clearInterval(timeCheck); }
袁单鹗
2023-03-14

看来你的逻辑倒过来了。每次当前时间等于计时器中的某个时间时,您都要提醒用户,对吗?为什么不使用setInterval()并跳过for()循环呢?如果已经对它们进行了排序,那么这样就可以了。另外,似乎一个if()可以使用更简单的“按秒比较时间”方法。

在这个演示中,我减慢了过程,使其变得明显。

脚本:

var timers = [
        [new Date( ( new Date() ).getTime() + 3000),'party!'], 
        [new Date( ( new Date() ).getTime() + 6000), 'sleep']
    ],
    timer = setInterval( checkTime, 300 );

function checkTime() {
    if( timers.length ) {
        if ( parseInt( timers[0][0].getTime() / 1000 ) 
            == parseInt( new Date().getTime() / 1000 ) ) {

            //alert here
            document.getElementById( 'result' ).insertAdjacentHTML(
                'beforeEnd',
                timers[0][0] + ": " + timers[0][1] + '<br />'
            );
            timers.shift();
        };
    } else {
        clearInterval( timer );
    };
};

超文本标记语言:

Wait 3 seconds...
<div id="result"></div>

 类似资料:
  • 我正在尝试开发一个滑块,如果用户没有点击后退或前进按钮,它每5秒就会改变一次。 但是如果他(用户)这样做了,间隔会触发多次。。。为什么? 我将间隔保存在一个变量中,并清除该变量,因此我不知道为什么这不起作用。。。但是看看你自己: }); 感谢阅读;-)

  • 我只想在进行ajax调用时清除上一个间隔并设置一个新的间隔。 当前代码为: 我尝试了许多推荐的变化,以便能够从函数外部清除间隔。如; 将"间隔"变量设置为null或false, 窗设定间隔, 在setInterval中写入计数函数, 将count函数作为ajax函数之外的单独函数编写, 但这两种变化都没有消除间隔。 稍后,我还需要清除键入的间隔。

  • 我有一个名为Interval的setInterval,它运行一个倒计时计时器。我有一个开始按钮,第一次点击时播放,第二次暂停就好了。当我双击时,它会将计时器显示回零,但似乎并没有清除实际的计时器。将只播放在显示被0替换之前停止的地方。

  • 我正在为学校的javascript入门课程做作业。我的概念是一种植物,当你给它浇水时它会生长,当它在x时间后没有水时它会变小。给植物加水使其生长是有效的,但我很难弄清楚如何使其在x时间内收缩。我被告知把它放在一个循环中,然后加上setInterval,但我是一个noob,所以我真的不知道该怎么办。此外,代码是荷兰语! 谢谢你抽出时间来帮助我!! 超文本标记语言 JAVASCRIPT:

  • get_user_record()此函数调用在数据库中提取数据的方法。我使用超时是因为我不想从这个方法得到响应,showUpdatedProgressBar()方法不断地检查数据库计数,并相应地给进度条赋值。为此,我使用了setInterval()函数,该函数正在工作,但无法清除间隔。请告诉我哪里出错了。

  • 我有一个对象,我把它放在一个数组中,我用