2013-10-11 63 views
0

我想知道如何將毫秒添加到我的JS計數器的測驗中。在這一點上,測驗本身只計數並尋找秒(在mysql中是秒數,如:120(2分鐘),並顯示爲02:00)。現在我想增加毫秒。在此先感謝javascript - 將毫秒添加到計數器

這裏的腳本:

<script type="text/javascript"> 
var quiz_timer = 0; 

$(window).load(function(){ 
setInterval('run_timer()',1000) 
}) 

function run_timer() 
{ 
quiz_timer++; 

if(quiz_timer > 60) 
{ 
    sec = quiz_timer%60; 
    min = Math.floor(quiz_timer/60); 
} 
else 
{ 
    sec = quiz_timer; 
    min = 0; 
} 

var timer=''; 

if(min < 10) 
timer = '0'; 

timer += min; 

timer += ':'; 

if(sec < 10) 
timer += '0'; 

timer += sec; 


var timer_h = 'Time: '+timer;//+rand(); 
$('#quiz_timer').html(timer_h); 
$('#quiz_time').val(quiz_timer); 
} 

function update_quiz() 
{ 
var cnt_questions = parseInt($('#cnt_questions').val()); 
var cq = parseInt($('#current_question').val()); 
var op = $('#question_'+cq).find('input[type=radio]:checked').length; 

if(op == 0) 
{ 
    alert('You must answer on the question.'); 
    return false; 
} 

if(cq < cnt_questions) 
{ 
    $('#question_'+cq).hide(); 
    $('#question_'+(cq+1)).fadeIn(1000); 
    $('#current_question').val(cq+1); 
    return false; 
} 

$(window).unbind('beforeunload'); 
document.frm_quiz.submit(); 
} 
</script> 

而這裏的功能是輸入mysql中的數據:

function timer($quiz_timer) 
{ 
if($quiz_timer > 60) 
{ 
    $sec = $quiz_timer%60; 
    $min = floor($quiz_timer/60); 
} 
else 
{ 
    $sec = $quiz_timer; 
    $min = 0; 
} 

$timer=''; 

if($min < 10) 
$timer = '0'; 

$timer .= $min; 

$timer .= ':'; 

if($sec < 10) 
$timer .= '0'; 

$timer .= $sec; 

return $timer; 
} 
+1

您是否嘗試過加入他們嗎? – putvande

+0

@putvande我一直在尋找正確的方式,但我找不到任何... –

+0

嗯..對於初學者..你需要改變你的'setInterval'運行每毫秒而不是每秒。 – putvande

回答

1

試試這個:

<script type="text/javascript"> 
    var quiz_timer = 0; 
    var millisecondFactor = 60; //lesser this factor, accurate the timer will work 
    var sec = 0; 
    var min = 0; 
    var hour = 0; 
    $(window).load(function() { 
     setInterval('run_timer()', (1000/millisecondFactor)); 
    }) 

    function run_timer() { 
     quiz_timer++; 
     millisec = quiz_timer; 
     if (millisec > millisecondFactor) { 
      sec++; 
      quiz_timer = 0; 
     } 
     if (sec > 59) { 
      min++; 
      sec = 0; 
     } 
     if (min > 59) { 
      hour++; 
      min = 0; 
     } 
     if (hour > 23) { 
      hour = 0; 
     } 

     var timer = ''; 

     if (min < 10) 
      timer = '0'; 

     timer += min; 

     timer += ':'; 

     if (sec < 10) 
      timer += '0'; 

     timer += sec; 

     timer += ':'; 

     if (millisec < 10) 
      timer += '0'; 

     timer += millisec; 

     var timer_h = 'Time: ' + timer;//+rand(); 
     $('#quiz_timer').html(timer_h); 
     $('#quiz_time').val(quiz_timer); 
    } 

    function update_quiz() { 
     var cnt_questions = parseInt($('#cnt_questions').val()); 
     var cq = parseInt($('#current_question').val()); 
     var op = $('#question_' + cq).find('input[type=radio]:checked').length; 

     if (op == 0) { 
      alert('You must answer on the question.'); 
      return false; 
     } 

     if (cq < cnt_questions) { 
      $('#question_' + cq).hide(); 
      $('#question_' + (cq + 1)).fadeIn(1000); 
      $('#current_question').val(cq + 1); 
      return false; 
     } 

     $(window).unbind('beforeunload'); 
     document.frm_quiz.submit(); 
    } 
</script> 
+0

現在工作完全正常,我可以看到計時器正在運行毫秒,你介意檢查我的編輯,看看在mysql中輸入數據的代碼的第二部分,出於某種原因,它輸入所有錯誤的時間... –

+0

以及我不介意..但你將不得不將它作爲新的問題發佈..:p –

+0

偉大的,當然,這裏是:http://stackoverflow.com/questions/19318651/js-add-timer-in- MySQL的-AS-日期時間與 - 毫秒 –

0

您當前的方式有很顯著的缺陷:setInterval的時機並不完美。處理時間的更好方法是使用Date對象,獲取開始時間,然後在setInterval中計算經過的時間。

下面是一些示例代碼,應該讓你在正確的軌道上。它只需要你來格式化你怎麼想的時候,你是好去:

/* display the currently elapsed time */ 
function showTime(){ 
    var time = formatTime(Date.now() - startTime); 
    document.getElementById('timer').innerHTML = time; 
} 

/* format the number of miliseconds how you wish them */ 
function formatTime(elapsed) { 
    var hours, minutes, seconds, milis; 

    hours = Math.floor(elapsed/(60*60*1000)); 
    elapsed -= hours * 60 * 60 * 1000; 

    minutes = Math.floor(elapsed/(60*1000)); 
    elapsed += minutes * 60 * 1000; 

    seconds = Math.floor(elapsed/1000); 
    elapsed -= seconds * 1000; 

    milis = elapsed; 

    return 'H' + hours + ' M' + minutes + ' S' + seconds + ' F' + milis; // change this 
} 

/* start counting */ 
var startTime = Date.now(); 
/* runs every 10ms, but it's hardly noticeable */ 
var interval = window.setInterval(showTime, 10); 

/* stop after a while */ 
window.setTimeout(function() { window.clearInterval(interval);}, 3000); 

DEMO:http://jsbin.com/EqoRezE/1/edit

PS:Date.now()可能無法使用您的特定目標瀏覽器。你可以找到一個替代實現此處 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/now

+0

這次我會堅持使用我的代碼...我真的很想先理解代碼,然後才能繼續前進。感謝您的努力。 –

+0

不用擔心。請記住,它存在根本上的缺陷,儘管在處理秒數時缺陷可能不會變得明顯,但在增加粒度時會困擾您。我會用一些格式編輯我的文章,以幫助您理解我的代碼和原始代碼。 – Tibos

+0

非常感謝你,我想讓它能夠正常工作,因爲我現在正處於工作中。我遇到了一些問題,用戶有兩秒鐘的時間,我必須增加毫秒,所以我可以更容易地排序......但是,感謝您幫助我,我真的很感激。 –