초마다 똑딱 거리는 타이머를 원한다면 setInterval은 좋지 않은 선택입니다. 요청 된 간격으로 만 실행되며 천천히 표류합니다. 당신이 그것을 자주 호출하지 않으면 그것을 사용하는 시계가 부드럽 지 않을 것이며, 이는 낭비입니다.
더 나은 전략은 setTimeout을 사용하여 순차적으로 자체를 호출하고 시간을 기준으로 한 지연 시간을 다음 틱에 더한 금액으로 설정하는 것입니다. 예 : 아주 간단한 시계 :
<script>
function addZ(n) {
return (n<10? '0' : '') + n;
}
function update() {
var d = new Date();
// Set lag to 20ms after next full second
var lag = 1020 - d.getMilliseconds();
document.getElementById('d0').innerHTML = addZ(d.getHours()) + ':' +
addZ(d.getMinutes()) + ':' + addZ(d.getSeconds());
setTimeout(update, lag);
}
window.onload = update;
</script>
<div id="d0"></div>
당신이 당신의 카운터 시스템 클럭을 사용하여 만족, 당신은, 당신이 날짜의 UTC methods 사용할 수 있습니다 (자세한 이하) 모두가 같은 번호를 보려면 : getUTCHours
, getUTCMinutes
및 getUTCSeconds
.
당신은 저를 작업 구현으로 이겼습니다. 유일한 문제는 사용자 시스템 시간이 지났기 때문에 꺼져 있으면 모든 사용자에게 맞지 않을 것입니다. – Brendan
감사! 그것은 내가 생각하는 것을 실제로 강타합니다. 이 루프가 0으로 내려간 후 원래 시간으로 되돌아 갈까요? (죄송합니다. JavaScript가 좋지 않습니다.) 또한 처음 시작 시간을 어떻게 변경합니까? 감사합니다. – user1386254
수는 없습니다. 시스템 시계를 사용하여 계산할 수는 없습니다. 그래서 예, 루프됩니다; 그러나 초기 조건을 선택할 수는 없습니다. – Brendan