Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/454.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Onclick函数第二次执行_Javascript_Html_Onclick_Setinterval - Fatal编程技术网

Javascript Onclick函数第二次执行

Javascript Onclick函数第二次执行,javascript,html,onclick,setinterval,Javascript,Html,Onclick,Setinterval,我有3个函数,每秒钟增加某些值 比如说 var timberinterval = setInterval(function() { timber = timber + timbermodifier; document.getElementById('timber').innerText = Math.floor(timber); }, 1000); var sulphurinterval = setIn

我有3个函数,每秒钟增加某些值

比如说

var timberinterval = setInterval(function() {
        timber = timber + timbermodifier;           
        document.getElementById('timber').innerText = Math.floor(timber);                   
 }, 1000);
var sulphurinterval = setInterval(function() {
        sulphur = sulphur + sulphurmodifier;           
        document.getElementById('sulphur').innerText = Math.floor(sulphur);                     
 }, 1000);
var goldinterval = setInterval(function() {
        gold = gold + goldmodifier;           
        document.getElementById('gold').innerText = Math.floor(gold);                   
 }, 1000);
这些功能由3个单独的按钮控制。如您所见,每秒钟函数都会随着修改器的增加而增加

用户并不总是在精确的秒数上单击,他们可能在0.5秒或0.8秒时单击,然后我的功能开始失去同步


如何延迟函数执行,使其与其他函数同步?

获取当前毫秒数:

var d = new Date();
var milli = d.getMilliseconds();
然后可以在setTimeout函数中调用setInterval函数:

setTimeout(function() { setInterval(function() { ... }, 1000); }, 1000-milli)
但是,如果您需要setInterval的返回值(例如清除间隔),我相信您必须使用承诺。

我建议在相同的
setInterval
中使用全局变量,以确保同步,如下面的代码片段所示

希望这有帮助

单击开始示例:
var木材改性剂、硫改性剂、金改性剂、木材、硫、金;
木材改性剂=硫改性剂=金改性剂=1;
木材=硫磺=黄金=0;
木材标志=硫磺标志=黄金标志=假;
document.getElementById(“木材btn”).addEventListener(“单击”,函数)(){
木材标志=真;
});
document.getElementById(“硫btn”).addEventListener(“单击”,函数)(){
硫标志=真;
});
document.getElementById(“gold btn”).addEventListener(“单击”,函数)(){
金旗=真;
});
var global_interval=setInterval(函数(){
国际单项体育联合会(木材联合会旗){
木材=木材+木材调节剂;
document.getElementById('timber').innerText=Math.floor(timber);
}
if(硫磺旗){
硫=硫+硫改性剂;
document.getElementById('sulfur').innerText=Math.floor(sulfur);
}
国际单项体育联合会(金旗){
黄金=黄金+黄金;
document.getElementById('gold').innerText=Math.floor(gold);
}
}, 1000);
//clearInterval(全局_interval)
木材


Gold
没有简单的方法来同步这些函数,所以只需使用一个间隔函数,所有元素都会被更新-并让按钮控制“(木材|硫磺|黄金)修改器”,它仍然会破坏同步,只是它会破坏所有3个,而不仅仅是1个,因为我确实需要它每秒运行一次(实时)。有没有一种方法可以让函数基于全局时钟?添加完整的代码,这样我们就可以提供帮助…啊,你想同步到系统时钟的秒数?您必须检查时间,然后在您的函数中,没有本机的方法来执行此操作。时间间隔甚至不能保证精确地每1000毫秒调用一次。为了获得准确的测量值,您应该使用setTimeout(),计算经过的时间,根据经过的时间更新您的(木材|硫磺|黄金),然后再次设置超时。@ZakariaAcharki这种方法很有效,但我遇到了一些问题。在我的初始设置中,我运行了以下代码,但是这些函数相隔1秒运行,如何修复<代码>设置超时(函数(){timberupdates(timber,timbermodifier);sulfurUpdates(sulfur,sulfurModifier);goldupdates(gold,goldmodifier);},1000毫);
函数相隔1秒运行-我不明白您在打开页面时的意思,加载时,您会看到数字50、51、52出现。它们应该一次全部出现,而不是一个接一个地出现。嗯,看起来您在第一次调用和TimberUpdate()函数中都添加了setTimeout。尝试从timberupdates()函数中删除它。如果我这样做,则函数将不同步