在JavaScript间隔

时间:2016-06-21 15:08:59

标签: javascript jquery timer

我目前有一个在setInterval方法中执行某些代码的函数。这是按预期工作的。问题是我有条件地执行此计时器中的代码。如果不满足条件,它将仍然等待超时,直到再次尝试。有没有一种“跳过”延迟的方法,只有在条件满足时才执行它。

您将在我的演示中注意到,在输出段落结果4和8之间存在长时间延迟(因为它在检查之间延迟)。我希望在整个过程中有一致的延迟。

DEMO https://jsfiddle.net/jdec4h0x/

var intAdd = setInterval(function() {
  refIndex++

  if(refIndex >= predefinedMaxLimit) {
    refIndex = 0;
    loopedThrough = true;
  }

  // if this exists then increment refIndex and try again
  if (loopedThrough || !$(".myclass[data-mydata1='" + predefinedData2 + "'][data-mydata2='" + refIndex + "']").length) {
    counter++;

    $('p').last().after('<p>IN Cond Ref = ' + refIndex + '</p>');


    // ** js code within this tiemout **

    if (counter >= predefinedOutputP) clearInterval(intAdd);
  }
}, 500);

2 个答案:

答案 0 :(得分:0)

您无法更改间隔的延迟。要么像Kevin B所说的那样销毁并创建一个间隔,要么你使用setTimeout,每次都要调用它,然后根据条件使用延迟或其他延迟。

/* ... */

if (conditionIsMet) intAdd = setTimeout(function() {}, 1000);
else intAdd = setTimeout(function() {}, 1);

/* ... */

示例here

答案 1 :(得分:0)

其他用户指出有多种方法。

我会使用while。我把它放在一个驻留在循环中的函数中。您可以使用while (progress) { refIndex++ if (refIndex >= predefinedMaxLimit) { refIndex = 0; loopedThrough = true; } if (loopedThrough || !$(".myclass[data-mydata1='" + predefinedData2 + "'][data-mydata2='" + refIndex + "']").length) { counter++; myTimer = myTimer + 500; console.log(refIndex); myFunction(refIndex); if (counter >= predefinedOutputP) { $('p').last().after('<p>Cleared Interval</p>'); progress = false; } } } function myFunction(ref) { setTimeout(function() { $('p').last().after('<p>IN Cond Ref = ' + ref + '</p>'); // ** js code within this tiemout ** }, myTimer) } 循环执行此操作。这样就可以在条件满足时突破。你需要在每个循环上增加计时器。

小提琴https://jsfiddle.net/jdec4h0x/4/

#include <stdlib.h>
#include <stdio.h>
int main(){
    char card_name[3];
    puts("Enter the card_name: ");
    scanf("%2s", card_name);
    int val = 0;
    if (card_name[0] == 'K'){
        val = 10;
    } else if (card_name[0] == 'Q'){
        val = 10;
    } else if (card_name[0] == 'J'){
        val = 10;
    } else if (card_name[0] == 'A'){
        val = 11;
    } else {
        val = atoi(card_name);
    }
    printf("The card name value is %i\n", val);
    return 0;
}