如何重新排列此代码,以便我的setInterval无限循环?

时间:2013-10-11 01:11:26

标签: javascript setinterval

我正在尝试使用HTML / Javascript进行简单的翻转卡/内存匹配(例如来自超级马里奥兄弟3)游戏,并且使用setInterval命令时遇到了一些问题。

以下是完整代码的链接:http://jsfiddle.net/msfZj/ 这是它的主要问题/主要逻辑:

if(click == 2)  //denotes two cards being clicked
{
    if(flippedArray[1].src === flippedArray[0].src)  // if click 1 == click 2 then refer to function 'delayMatch' which sets click 1 and 2 cards to not be displayed
    {
        window.setInterval(function() { delayMatch() }, 500);       
        console.log("EQUAL");

    }
    else
    {
        window.setInterval(function() { delayNoMatch() }, 500); // if click 1 != click 2 then display card.png 
        console.log("NOT EQUAL");

    }
        function delayMatch()  //function for matching pairs
    {
    flippedArray[0].style = "display:none;";
    flippedArray[1].style = "display:none;";

    }
        function delayNoMatch()  //function for non-matching pairs
    {
    flippedArray[0].src = "card.png";
    flippedArray[1].src = "card.png";   
    }


    click = 0;  // when clicked two cards set click back to zero    
}

我点击的前两张卡总能工作:但是从那时起,setInterval会每隔500毫秒一次又一次地在无限循环中反复运行该功能。

如果有人能够指出我正确的方向,我会非常感激。

非常感谢你的时间。

2 个答案:

答案 0 :(得分:1)

看起来你需要setTimeout,只运行一次?

window.setTimeout(function() { delayMatch() }, 500);       

否则,您需要使用clearInterval(i)清除时间间隔,但首先使用setInterval的返回值设置“i”:

var i = window.setInterval(function() { delayMatch() }, 500);

Here's a demo(我为JSFiddle确认了一点)。

答案 1 :(得分:1)

你想要使用setTimeout()而不是setInterval()

使用setTimeout时的一个方便的功能是clearTimeout。假设您要设置计时器,但可能需要取消按钮

var timer = setTimeout(fn,1000);

//later maybe
clearTimeout(timer);
相关问题