2013-02-28 2 views
2

이 카운터가 있으므로 60 초마다 75 씩 숫자를 증가시켜야합니다. 아래에 나와있는 코드는이 작업을 수행하지만 일부 숫자를 반올림하기 때문에 다른 숫자보다 길게 유지되고 일부 숫자는 건너 뜁니다.일정 기간 동안 숫자를 부드럽게 처리하십시오.

필자는 동일한 최종 결과를 얻기 위해 원활하게/균등하게 계산하도록하고 싶습니다. 나는 어떻게 든 setInterval 타이머 수를 계산할 필요가있을 것이라는 것을 알고 있지만, 나는 그것을 얻으려면 무엇을 확신하지 못합니다.

(function(){ 
    //Numbers 
    var num = 0; 
    var perMinute = 75; 
    var perSecond = perMinute/60; 

    //Element selection 
    var count = document.getElementById("count"); 

    function update(){ 

     //Add the per-second value to the total 
     num += perSecond; 

     //Display the count rounded without a decimal 
     count.innerHTML = Math.round(num); 
    } 

    //Run the update function once every second 
    setInterval(update, 1000); 
})(); 

근무 예 : http://jsfiddle.net/ChrisMBarr/9atym/1/

답변

1

반올림을 이동하면이 문제가 해결 된 것으로 보입니다 (편집 : 아니요, 아래에 더 나은 수정 사항이있는 jsfiddle 예제 참조).

(function(){ 
//Numbers 
var num = 0; 
var perMinute = 75; 
var perSecond = perMinute/60; 

//Element selection 
var count = document.getElementById("count"); 

function update(){ 

    //Add the per-second value to the total 
    num += Math.round(perSecond); 

    //Display the count rounded without a decimal 
    count.innerHTML = num; 
} 

//Run the update function once every second 
setInterval(update, 1000/perSecond); 
})(); 

편집 : 적절한 수정 - 나는 당신의 변화를 이해 http://jsfiddle.net/4y2y9/1/

+0

그게 완벽합니다! 감사. –

+0

당신을 진심으로 환영합니다. 그러나 나는 그것이 당신이 어떻게해서든지 시험해 볼 것 인 매우 다음 것이다라고 생각한다) – yoshiwaan

+0

글쎄, 나는 당신이 그 다음 하나의 돈을 이것에 붙이지 않았기 때문에 기쁘다. –

2

정확 Timeout 또는 Interval에 의존하지 마십시오. 대신 "시작 시간"을 저장하고 현재 시간과 비교하십시오. 당신이 변화하는 1000을 조정할 수 있습니다

(function() { 
    var start = new Date().getTime(), 
     perMinute = 75, 
     perMS = perMinute/60000, 
     count = document.getElementById('count'); 
    function update() { 
     var elapsed = new Date().getTime()-start; 
     count.innerHTML = Math.round(elapsed*perMS); 
    } 
    setInterval(update,1000); 
})(); 

참고 카운터 (perMinute의 더 큰 값을 더 중요)은 "부드럽게"그것은 항상 해상도의 오버 슈트 내에서 완벽하게 작동합니다.

+0

,하지만 여전히 번호를 건너 뜁니다. 그것은 다음과 같이 계산합니다 : 1,3,4,5,6,8 ... 여기를보십시오 : http://jsfiddle.net/9atym/2/ - 또한 이것이 완전한 정확성을 위해 사용되는 것은 그다지 중요하지 않습니다 . 그것은 주로 집으로가는 길에 사용됩니다. –

+0

이것이 내가 '1000'을 조정한다고 말한 이유입니다. '100'으로 변경하면 모든 숫자를 쳤습니다. –

관련 문제