как остановить сообщение от таймера JavaScript от повторения? - PullRequest
2 голосов
/ 23 февраля 2011

У меня есть таймер для моей игры, но сообщение будет продолжать передаваться магу, поэтому он говорит это несколько раз, мне было интересно, как вы можете заставить его сказать это один раз.

<head>
<script type="text/javascript">
var c=10;
var t;
var timer_is_on=0;

function timedCount() {
document.getElementById('txt').value = c;
c = c - 1;
if (c == -1||c < -1){
        var _message = document.createTextNode("You have mined 1 iron ore!");
document.getElementById('message').appendChild(_message); 
startover();
}
}

function startover() {
 c = 10;
clearTimeout(t);
timer_is_on=0;
doMining();
}
function doMining() {
if (!timer_is_on) {
    timer_is_on = true;
    t = setInterval(function () {
        timedCount();
    }, 1000);                
}
}

</script> 

<SPAN STYLE="float:left">
<form>
<input type="button" value="Mining" onClick="doMining()">
<input type="text" id="txt">
</form>
</SPAN>
<html>
<center>
<div id='message'></div>

Ответы [ 2 ]

2 голосов
/ 23 февраля 2011

Вместо setInterval используйте window.setTimeout.

Это вызовет функцию только один раз.

Редактировать: если вы хотите, чтобы одно сообщение появлялось и обновлялось каждый раз, сначаладобавить глобальный счетчик:

var mineCount = 0;

Затем измените код на этот:

if (c <= -1) {
    mineCount++;
    var _message = "You have mined " + mineCount + " iron ore" + ((mineCount > 1) ? "s" : "") + "!";
    document.getElementById('message').innerHTML = _message;
    startover();
}

Это назначит содержимое элемента вместо добавления к нему каждый раз.

0 голосов
/ 23 февраля 2011

Ваша startOver функция вызывает doMining(). Конечно, это не должно ...?

...