我正在使用 Raphael 库在 javaScript 中构建一个时钟,但当我单击箭头时,我似乎无法让它永久更改时间,它会将时间更改一小时,但一秒钟后就会更改改回当前的正确时间。
function startTime(){
var today = new Date();
var h = today.getHours();
var m = today.getMinutes();
var s = today.getSeconds();
var ny_h = today.getHours()-5;
var hk_h = today.getHours()+8;
var jh_h = today.getHours()+2;
var multiplier = 0;
m = checkTime(m);
s = checkTime(s);
h = checkTime(h);
seconds.animate({transform: [ 'r',((s*6)-180),200,200]});
minute.animate({transform: [ 'r',((m*6)-180),200,200]});
hour.animate({transform: [ 'r',(((h+multiplier)*30)-180),200,200]});
change.click(function(){
var arrow1 = paper.path(up).attr({fill:"black"});
var arrow2 = paper.path(down).attr({fill:"black"});
arrow1.click(function(){
multiplier+=1;
//var h = today.getHours()+1;
});
setTimeout(function(){startTime()},1000);
function checkTime(i) {
if (i < 10) {i = "0" + i}; // add zero in front of numbers < 10
return i;
}
}
startTime(); //Function call that starts the startTime function.
当单击箭头时,我尝试在小时变量上加上一小时,但一秒钟后又变回来了。因此,我还尝试添加一个名为 multiplier 的变量,并在每次单击箭头时更改该变量,随后更改时间,但我似乎无法访问单击函数中的 multiplier 变量。我不知道为什么会这样,并且非常感谢一些帮助。谢谢。
最佳答案
问题是 startTime
定义了时间校正变量,显示时间并安排自己在一秒钟内再次调用。
如果要保留 startTime
中定义的校正变量而不是每次都重新定义 showTime,则需要单独包含显示时间的函数
被调用。showTime
在 showTime
内启动的超时调用将类似于 setTimeout( showTime, 1000);
。
或者,您可以使用 setInterval( showTime, 1000);
作为从 startTime
外部函数内部启动的持续间隔计时器;
关于Javascript时钟,改变时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35396961/