2014-12-06 54 views
0

我只是希望在这里指出正确的方向。我是一个JavaScript的初学者,所以有一些基本的东西我不理解。谷歌搜索似乎没有帮助,因为显然这个问题从来没有真正问过。如何停止并启动某个功能?

我有一个游戏,一旦按下Go按钮,就有60秒的倒计时。现在,当60秒倒计时正在运行时,我想运行一个函数orientationStuff(),它可以处理orientationchange上的各种东西。这是没有问题的......但是,我只想要orientationStuff()在60秒倒计时期间运行。所以一旦它达到0,没有更多的orientationStuff()正在进行。但是,一旦你点击再去想倒计时再次(并因此开始orientationStuff()

+0

我不能uderstand你绑做什么,你可以展示你的代码? _这个问题从来没有真正问过_相信我这是一个没有,只是你的问题是不够清楚 – 2014-12-06 01:23:16

+0

什么是orientationStuff函数做,并且是你的问题中的代码。如果它在屏幕上像动画一样做东西,你可以使用empty()或remove()来使用超时函数在60秒后清除DOM。 – Tasos 2014-12-06 01:55:37

回答

2

尝试像这样在Javascript:

var i = 0; //counts every frame at 60FPS 
function countdown() { 
    function frame() { 
     i += 1; //up the frame by 1; 
     /* do stuff; you can use variable switch-based logic to perform different functions*/ 
     if(i > 3599) { /* equivilant of 60 seconds, you can add your own condition in if you want*/ 
      i = 0; 
      clearInterval(looper_interval); //stops 
     } 
    } 
    var looper_interval = setInterval(frame, 16); //this code runs the function frame() every 16 milliseconds 
} 
+0

是的,'setInterval'。在设置时间间隔之前,可能需要提到的是,在设置时间间隔之前,OP应该设置他们的方向事件处理程序来运行游戏代码,然后移除事件处理程序,显示分数屏幕,无论在与clearInterval相同的块中。 – 2014-12-06 01:29:35

2

答案很简单,你用setTimeout你想要的功能执行和60000毫秒

setTimeout(function(){ 
    // do whatever you want to happen here 
},60000) 

在与jQuery开始此,如果您有相关的类的按钮go你会使用

方面
$(document).on('click','.go',function(){ 
    setTimeout(function(){ 
     // Game over man! GAME OVER!! 
    },60000) 
}); 

我猜你可能想停止计时器 - 比方说玩家赢了游戏。在这种情况下,您就可以通过定时器的“ID”,你可以使用clearTimeout阻止它

var gameTimerId = null; 
$(document).on('click','.go',function(){ 
    gameTimerId = setTimeout(function(){ 
     // Hury, before someone calls clearTimeout 
    },60000) 
}); 

/// where the player wins 
clearTimeout(gameTimerId); 

setTimeout运行函数一次。如果你想重复执行一个功能,你也可以使用类似的功能setInterval

+0

我很确定setTimeout()不会重复运行代码,而是等待指定的毫秒数,然后运行一次函数。 – 2014-12-06 01:31:19

+0

@GwiddleWorker,这正是OP要求的。点击go按钮再次启动定时器。 “但是,一旦你再次点击开始我想倒计时重新开始” – Jamiec 2014-12-06 01:31:49

+0

除了'setTimeout()'是非常不精确的,我相信只有当JS调用堆栈当前为空时才会执行,如果有足够的游戏,这可能永远不会发生活动发生。 – 2014-12-06 01:33:02

0

尝试使用setTimeout 60秒,并切换提供orientationStuff()时看到的布尔值。

如果setTimeout位于一个函数内,您可以简单地重置布尔值并重新运行该按钮上的函数。

UPDATE

var orientationAllowed = false; 
function orient() { 
    orientationAllowed = true; 
    setTimeout(function(){ 
    orientationAllowed = false; 
    },60000); 
}