我用jquery制作了一个时钟。这很好。现在我注意到,时间与我的实际系统时间不同,而我的时钟启动时它很好。如果我的时钟运行很长时间,我会得到系统时间的变化。
我的功能是:
$(document).ready(function(){
var paper = new Raphael(document.getElementById('USClock'),500,500);
var secondHand = paper.path('m 250,250, l 0 -200');
var minuteHand = paper.path('m 250,250, l 0 -200');
var hourHand = paper.path('m 250,250, l 0 -150')
minuteHand.attr({'stroke':"#f00",'stroke-width':5});
hourHand.attr({'stroke':"#0ff",'stroke-width':10})
var myDate = new Date();
var actualSeconds = myDate.getSeconds();
var actualMinutes = myDate.getMinutes();
var actualHours = myDate.getHours();
//
var currentSecondDeg = actualSeconds*6;
var currentMinuteDeg = actualMinutes*6;
var currentHourDeg = actualHours*30 + ((actualMinutes)*0.5);
var num = currentSecondDeg;
secondHand.rotate(currentSecondDeg,250,250);
minuteHand.rotate(currentMinuteDeg,250,250);
hourHand.rotate(currentHourDeg,250,250);
var update = function(){
num +=6;
currentSecondDeg = num;
secondHand.rotate(currentSecondDeg,250,250);
if(( currentSecondDeg % 360) == 0){
num = 0;
currentMinuteDeg +=6;
minuteHand.rotate(currentMinuteDeg,250,250);
currentHourDeg += 0.5; // 360/12 = 30deg per hour so per min 30/60 = 0.5
hourHand.rotate(currentHourDeg,250,250);
if(currentMinuteDeg == 360){
currentMinuteDeg = 0;
}
if(currentHourDeg == 360){
currentHourDeg = 0;
}
}
//$('p').html('SecondsDeg'+(currentSecondDeg)+'<br> currentMinuteDeg'+currentMinuteDeg+'<br>currentHourDeg'+currentHourDeg);
}
var myInterval = setInterval(update,1000);
})
实际上我的问题是为什么设置的间隔与长时间的过程不同。如果有人发现我的职能存在问题或错误的工作方法,请告诉我。另外,如果有人知道一种好方法,我们将不胜感激。
提前致谢!有什么方法可以解决这个问题,否则我如何在我的网站上显示 4 个不同的时钟?从服务器获取时间的唯一方法?
最佳答案
setInterval()
(以及 setTimeout()
)可能会受到处理器速度、浏览器 JavaScript 实现速度以及加载到处理器上。它们绝不与系统时钟对齐。
阅读this page了解更多信息。
关于jquery - 设置间隔秒数比本地时间秒数快,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8182008/