我正在使用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的变量,并在每次单击箭头时更改它,随后更改时间,但我似乎无法访问click函数中的乘数变量。我不知道为什么会这样,并且真的很感激一些帮助。谢谢。
答案 0 :(得分:1)
问题是startTime
定义时间校正变量,显示时间和计划本身在一秒钟内再次调用。
显示时间的函数showTime
需要单独包含,如果startTime
中定义的更正变量要保留,而不是每次调用showTime
时都重新定义。
showTime
内开始的超时通话看起来像setTimeout( showTime, 1000);
。
或者,您可以使用setInterval( showTime, 1000);
作为从startTime
外部函数内启动的持续间隔计时器;
答案 1 :(得分:0)
这个简单的例子应该得到你的陈述。请注意,乘数变量移动到函数之外,以便保留其值。 setTime()替换为setInterval()。现在您需要做的就是在updateClock()函数中插入Raphaël代码。
运行代码段以查看其是否有效
var multiplier = 0;
// click handler
function setHour(n) {
multiplier += n;
updateClock();
}
// update UI
function updateClock() {
var today = new Date();
today.setHours(today.getHours() + multiplier);
document.getElementById('clock').innerHTML = today.toLocaleTimeString();
// insert your Raphaël code to update the clock here
}
// initialize
updateClock();
window.setInterval(updateClock, 1000);
.container a {
text-decoration: none;
display: block;
width: 1.2em;
background-color: black;
color: white;
text-align: center;
}
#clock {
font-size: 23px;
font-family: monospace;
}
<div class="container">
<a href="javascript:void(0)" onclick="setHour(1)">▲</a>
<a href="javascript:void(0)" onclick="setHour(-1)">▼</a>
<span id="clock"></span>
</div>