javascript - 如何阻止来自 javascript 计时器的消息重复?

标签 javascript message timer-jobs

我的游戏有一个计时器,但消息会在法师上持续显示,所以它会说多次,我想知道你怎么让它说一次。

<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>

最佳答案

使用 window.setTimeout 代替 setInterval

这只会触发该函数一次。

编辑:如果你的意思是你希望一条消息每次都出现并更新,首先添加全局计数器:

var mineCount = 0;

然后把代码改成这样:

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

这将分配元素的内容,而不是每次都添加。

关于javascript - 如何阻止来自 javascript 计时器的消息重复?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5088437/

相关文章:

javascript - 将 JavaScript 对象传递给 PHP 不起作用

javascript - 下拉宽度在ie8中自动​​改变

jsf - 在 JSF 转换/验证机制之外的操作方法中创建 FacesMessage?

sharepoint - 如何设置自定义 SharePoint 计时器作业的 "Job Description"

javascript - 没有 childList 的 MutationObserver characterData 使用

javascript - 无法将 html 文件链接到 jquery

来自 Process.MainWindowHandle 的 C# HwndSource

c++ - 如何判断一个线程是否有消息队列?

sharepoint - 用于 SharePoint 2010 计时器作业的帐户

c# - 在 SharePoint 计时器作业中创建发布页面会引发 MissingMethodException