2011-11-09 254 views
4

我有一个JavaScript代码,显示倒计时器从5分钟。如何在倒数计时器中显示毫秒javascript

这是代码

var mins 
var secs; 

function cd() { 
    mins = 1 * m("05"); // change minutes here 
    secs = 0 + s(":00"); // change seconds here (always add an additional second to your total) 
    redo(); 
} 

function m(obj) { 
    for(var i = 0; i < obj.length; i++) { 
     if(obj.substring(i, i + 1) == ":") 
     break; 
    } 
    return(obj.substring(0, i)); 
} 

function s(obj) { 
    for(var i = 0; i < obj.length; i++) { 
     if(obj.substring(i, i + 1) == ":") 
     break; 
    } 
    return(obj.substring(i + 1, obj.length)); 
} 

function dis(mins,secs) { 
    var disp; 
    if(mins <= 9) { 
     disp = " 0"; 
    } else { 
     disp = " "; 
    } 
    disp += mins + ":"; 
    if(secs <= 9) { 
     disp += "0" + secs; 
    } else { 
     disp += secs; 
    } 
    return(disp); 
} 

function redo() { 
    secs--; 
    if(secs == -1) { 
     secs = 59; 
     mins--; 
    } 

    var timerStr = dis(mins,secs); 
    $("#countDownTimer").text(timerStr); // setup additional displays here. 
    if((mins == 0) && (secs == 0)) { 

    } else { 
     cd = setTimeout("redo()",1); 
    } 


} 

function init() { 
    cd(); 
} 

window.onload = init; 

我怎样才能改变脚本来显示毫秒太

或有任何简单的脚本来显示,包括分钟的倒计时计时器:秒:毫秒

+0

[用毫秒和回调的jQuery1分钟倒计时】的可能重复(http://stackoverflow.com/questions/3020062/jquery-1-minute-countdown-with-milliseconds-and-callback)也见[显示毫秒的JavaScript倒计时](http://stackoverflow.com/questions/4870569/javascript-countdown-with-showing-milliseconds)。 –

回答

2

我重新编写了包含毫秒的代码。还要确保setTimer设置正确。

var mins 
var secs; 
var ms; 

function cd() { 
    mins = 1 * m("05"); // change minutes here 
    secs = 0 + s(":00"); // change seconds here (always add an additional second to your total) 
    ms = 0 + ms(":00");//change millisecons here 
    redo(); 
} 

function m(obj) { 
    for(var i = 0; i < obj.length; i++) { 
     if(obj.substring(i, i + 1) == ":") 
     break; 
    } 
    return(obj.substring(0, i)); 
} 

function s(obj) { 
    for(var i = 0; i < obj.length; i++) { 
     if(obj.substring(i, i + 1) == ":") 
     break; 
    } 
    return(obj.substring(i + 1, obj.length)); 
} 

function ms(obj) { 
    for(var i = 0; i < obj.length; i++) { 
     if(obj.substring(i, i + 1) == ":") 
     break; 
    } 
    return(obj.substring(i + 1, obj.length)); 
} 

function dis(mins,secs,ms) { 
    var disp; 
    if(mins <= 9) { 
     disp = " 0"; 
    } else { 
     disp = " "; 
    } 
    disp += mins + ":"; 
    if(secs <= 9) { 
     disp += "0" + secs; 
    } else { 
     disp += secs + ":"; 
    } 
    if(ms <= 9) { 
     disp += "0" + ms; 
    } else { 
     disp += ms; 
    } 
    return(disp); 
} 

function redo() { 
    ms--; 
    if(ms == -1) { 
     ms = 99; 
     secs--; 
    } 
    if(secs == -1) { 
     secs = 59; 
     mins--; 
    } 

    var timerStr = dis(mins,secs,ms); 
    document.getElementById('countdown_fld').innerText=timerStr; // setup additional displays here. 
    if((mins == 0) && (secs == 0) && (ms == 0)) { 

    } else { 
     cd = setTimeout("redo()",10); //make sure to set the timer right 
    } 


} 

function init() { 
    cd(); 
} 
+0

是的,我的代码有一个小小的变化,函数每秒调用即cd = setTimeout(“redo()”,1000) ; – Linto

+0

感谢您的帮助,让我知道毫秒应该在000,对不对?因为1000毫秒= 1秒 – Linto

+0

1000 = 1秒所以... 如果您将它设置为100将充分模拟毫秒。 –

2

你调用的1参数,这意味着每计时器 '事件' 1millisecond超时,但您在redo()函数中将该毫秒事件视为整秒。

重做()应为:

function redo() { 
    s -= 0.001; // subtract 1 millisecond 
    if (s < 0) { 
     secs = 59.999; 
     mins--; 
    } 
} 

等。但是,由于每毫秒运行这段代码会给浏览器带来相当大的负载,并且不会以精确的毫秒精度运行。你应该做的是跟踪时间 - 当你开始倒计时时,使用Date()对象记录当前系统时间,该对象具有毫秒精度。

以比毫秒(例如,每200ms/0.2秒)更长的时间间隔调用您的重做(),然后从定时器的开始时间减去该时间点的系统时间。

+0

我也需要显示毫秒。 codeie iam在每秒调用函数中有一个小小的改变,即cd = setTimeout(“redo()”,1000);那么我们应该如何改变这一点。谢谢你的建议 – Linto

+0

JS Date对象有毫秒: https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date –