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