javascript-将毫秒添加到计数器

javascript-将毫秒添加到计数器,javascript,timer,Javascript,Timer,我想知道如何将毫秒添加到测验的JS计数器。此时,测验本身只计算并查找秒数(在mysql中是秒数,如:120(2分钟),显示为02:00)。现在我想给它加上毫秒。提前谢谢 以下是脚本: <script type="text/javascript"> var quiz_timer = 0; $(window).load(function(){ setInterval('run_timer()',1000 ) }) function run_timer() { quiz_timer++

我想知道如何将毫秒添加到测验的JS计数器。此时,测验本身只计算并查找秒数(在mysql中是秒数,如:120(2分钟),显示为02:00)。现在我想给它加上毫秒。提前谢谢

以下是脚本:

<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>

var\u定时器=0;
$(窗口)。加载(函数(){
setInterval('run_timer()',1000)
})
函数run_timer()
{
计时器++;
如果(测验计时器>60)
{
秒=测验计时器%60;
最小值=数学楼层(测验计时器/60);
}
其他的
{
秒=测验计时器;
最小值=0;
}
变量计时器=“”;
如果(最小值<10)
计时器='0';
定时器+=分钟;
计时器+=':';
如果(第10节)
计时器+='0';
定时器+=秒;
var timer_h='Time:'+timer;//+rand();
$('#quick_timer').html(timer_h);
$('测验时间').val(测验计时器);
}
函数更新_quick()
{
var cnt_questions=parseInt($('cnt_questions').val();
var cq=parseInt($('current#u question').val();
var op=$('#问题'+cq).find('input[type=radio]:checked').length;
如果(op==0)
{
警惕('你必须回答这个问题');
返回false;
}
如果(cq
下面是在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;
}
功能计时器($quick\u计时器)
{
如果($测验计时器>60)
{
$sec=$quick\u计时器%60;
$min=楼层($60);
}
其他的
{
$sec=$quick\u计时器;
$min=0;
}
$timer='';
如果($min<10)
$timer='0';
$timer.=$min;
$timer.=':';
如果($sec<10)
$timer.='0';
$timer.=$sec;
返回$timer;
}

您当前的方式有一个非常严重的缺陷: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);
演示:

PS:Date.now()可能在特定的目标浏览器上不可用。您可以在此处找到替代实现: 试试这个:

<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>

var\u定时器=0;
var毫秒因子=60//这个因素越小,计时器就越精确
var-sec=0;
var min=0;
var小时=0;
$(窗口)。加载(函数(){
setInterval('run_timer()',(1000/毫秒因子));
})
函数run_timer(){
计时器++;
毫秒=测验计时器;
如果(毫秒>毫秒系数){
sec++;
计时器=0;
}
如果(第59节){
min++;
秒=0;
}
如果(最小值>59){
小时++;
最小值=0;
}
如果(小时>23){
小时=0;
}
变量计时器=“”;
如果(最小值<10)
计时器='0';
定时器+=分钟;
计时器+=':';
如果(第10节)
计时器+='0';
定时器+=秒;
计时器+=':';
如果(毫秒<10)
计时器+='0';
定时器+=毫秒;
var timer_h='Time:'+timer;//+rand();
$('#quick_timer').html(timer_h);
$('测验时间').val(测验计时器);
}
函数更新_quick(){
var cnt_questions=parseInt($('cnt_questions').val();
var cq=parseInt($('current#u question').val();
var op=$('#问题'+cq).find('input[type=radio]:checked').length;
如果(op==0){
警惕('你必须回答这个问题');
返回false;
}
如果(cq
你试过添加它们吗?@putvande我一直在四处寻找合适的方法,但我找不到任何……嗯。。首先。。你需要将你的
setInterval
改为每毫秒运行一次,而不是每秒钟运行一次。@putvande如果我理解正确,1000是一秒,对吧,它是1000ms=1s,如果我把它改为100而不是1000,它将每毫秒运行一次,对吗?我在正确的道路上吗?这次我将坚持我的代码。。。我真的很想先理解代码,然后才能继续。谢谢你的努力,不用担心。请记住,它存在根本性的缺陷,虽然在处理秒数时,该缺陷可能不会很明显,但当您增加粒度时,它会困扰您。我会用一些格式化来编辑我的文章,帮助你理解我的代码和你的原始代码。非常感谢你,我想让它工作,因为我现在在工作的中间。我面临一些问题,用户有相同的时间,比如2秒,我必须添加毫秒,这样我可以更容易地对它们进行排序。。。不过,谢谢你的帮助,我真的很感激。现在工作得很好,我可以看到计时器正在运行毫秒,你介意检查我的编辑以查看在mysql中输入数据的代码的第二部分吗,出于某种原因,它输入的时间都错了…我不介意。。但是你必须把它作为一个新的问题来发帖..:好的,当然可以,这是: