Javascript 使用未更新的构造函数创建计时器

Javascript 使用未更新的构造函数创建计时器,javascript,canvas,Javascript,Canvas,我遇到的问题是,我通过每个构造函数设置了一个定义的秒数,但它不会在每次值减小时更新,而是保持在参数值,如360。当我将秒数打印到console.log()时,由于某种奇怪的原因,它被固定在360。有人知道如何获得它,这样我就可以拥有多个构造函数并更新每个构造函数的秒数吗?很像 setInterval(function(){renderTime("drag",0,0,drag,6,360)}, 1000); setInterval(function(){renderTime("cool",0,0,

我遇到的问题是,我通过每个构造函数设置了一个定义的秒数,但它不会在每次值减小时更新,而是保持在参数值,如360。当我将秒数打印到console.log()时,由于某种奇怪的原因,它被固定在360。有人知道如何获得它,这样我就可以拥有多个构造函数并更新每个构造函数的秒数吗?很像

setInterval(function(){renderTime("drag",0,0,drag,6,360)}, 1000);
setInterval(function(){renderTime("cool",0,0,cool,3,180)}, 1000);
总之,seconds参数并不是每秒都用seconds更新--;它保持在最初设定的任何位置,比如360或180。 因此,与其去360359358357;它是360度

function renderTime(name,x,y,img,minute,seconds) {
seconds--;
console.log(seconds);
var canvas = document.getElementById(name);
var ctx = canvas.getContext('2d');

// Time
ctx.font = "15px Arial";
ctx.fillStyle = '#000';
ctx.fillText(seconds, (canvas.width/2)-8, height/2+80);

}

setInterval(function(){renderTime("drag",0,0,drag,6,360)}, 1000);

您的第一个setInterval函数将每1000毫秒运行一次以下函数:

renderTime("drag",0,0,drag,6,360);
在函数内部,函数中的本地变量
seconds
将减少1,但下一秒将使用新的新变量调用函数

解决方案是在任何函数之外设置一个全局变量:

var seconds = 360;
并删除函数的最后一个参数,如下所示:

function renderTime(name,x,y,img,minute) {
seconds--;
console.log(seconds);
var canvas = document.getElementById(name);
var ctx = canvas.getContext('2d');

// Time
ctx.font = "15px Arial";
ctx.fillStyle = '#000';
ctx.fillText(seconds, (canvas.width/2)-8, height/2+80);

}
这就是你调用函数的样子

setInterval(function(){renderTime("drag",0,0,drag,6)}, 1000);

注意如果启动两个
setInterval()
都调用同一个函数,那么这两个函数都会将变量
seconds
从本质上说每秒减少一个,变量将以两倍的速度减少。

在代码中,
setInterval
将一个静态数字作为秒的参数,而不是使用
seconds
变量。应该更
setInterval(函数(){renderTime(“拖动”,0,0,拖动,6,秒)},1000)其中
秒数
先前设置为360。