Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/442.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript firefox的10毫秒间隔_Javascript_Intervals_Stopwatch - Fatal编程技术网

Javascript firefox的10毫秒间隔

Javascript firefox的10毫秒间隔,javascript,intervals,stopwatch,Javascript,Intervals,Stopwatch,所以我制作了一个简单的计时器,格式如下:MM:SS.MS 您可以在此处查看[已删除] 它在chrome、IE等浏览器中运行良好,但在Firefox中,秒的长度是它的两倍 我看了一些其他的秒表,但我不明白。 最好的方法是什么?现在我有一个10毫秒的时间间隔来生成计时器 函数看起来是这样的,我希望它是可以理解的: var state = false; var msTimer = null; var min = document.getElementById("min"); var sec = do

所以我制作了一个简单的计时器,格式如下:MM:SS.MS

您可以在此处查看[已删除]
它在chrome、IE等浏览器中运行良好,但在Firefox中,秒的长度是它的两倍

我看了一些其他的秒表,但我不明白。 最好的方法是什么?现在我有一个10毫秒的时间间隔来生成计时器

函数看起来是这样的,我希望它是可以理解的:

var state = false;
var msTimer = null;

var min = document.getElementById("min");
var sec = document.getElementById("sec");
var ms = document.getElementById("ms");

var minCount = 0;
var secCount = 0;
var msCount = 0;


document.onkeydown = function timer(e) {

if (!e) { e = window.event; }

if (e.keyCode == "32") {

    if (state == false) {
        state = true;

        min.innerHTML = "00";
        sec.innerHTML = "00";
        ms.innerHTML = "00";

        msTimer = window.setInterval(function() {
            if (msCount == 99) {

                msCount = 0;
                secCount++;

                // Minutes
                if (secCount == 60) {

                    secCount = 0;
                    minCount++;

                    if (minCount <= 9)
                    { min.innerHTML = "0" + minCount; }
                    else
                    { min.innerHTML = minCount; }
                }

                // Seconds
                if (secCount <= 9)
                { sec.innerHTML = "0" + secCount; }
                else
                { sec.innerHTML = secCount; }

            } else { msCount++; }

            // Miliseconds
            if (msCount <= 9)
            { ms.innerHTML = "0" + msCount; }
            else
            { ms.innerHTML = msCount; }

            // 1 Hour
            if (minCount == 60) {

                clearInterval(msTimer);

                min.innerHTML = "N0";
                sec.innerHTML = "00";
                ms.innerHTML = "0B";

                state = false;

                minCount = 0;
                secCount = 0;
                msCount = 0;
            }
        }, 10);

    } else if (state == true) {
        state = false;

        clearInterval(msTimer);

        minCount = 0;
        secCount = 0;
        msCount = 0;
    }
}
var state=false;
var msTimer=null;
var min=document.getElementById(“min”);
var sec=document.getElementById(“sec”);
var ms=document.getElementById(“ms”);
var minCount=0;
var secCount=0;
var msCount=0;
document.onkeydown=功能计时器(e){
如果(!e){e=window.event;}
如果(如keyCode==“32”){
if(state==false){
状态=真;
min.innerHTML=“00”;
sec.innerHTML=“00”;
ms.innerHTML=“00”;
msTimer=window.setInterval(函数(){
如果(msCount==99){
msCount=0;
secCount++;
//会议记录
如果(秒计数=60){
secCount=0;
minCount++;

如果(minCount您不应该依赖于计时器的精确间隔为10ms。如果您将每个计时器滴答声视为刷新屏幕计时器的请求,但从系统时钟或类似的东西获取测量值,则会更好

然后,不管机器(和JS实现)有多慢或多忙,您总会看到一个精确的计时器1——只是更新频率较低的计时器



1当然,这只能与系统时钟一样精确。如果Javascript可以访问高性能计时器,如.NET类或Java方法,那么最好使用它。

您不应该依赖计时器的间隔正好是10毫秒。如果您将每个计时器滴答声视为刷新sc的请求,效果会更好重入定时器,但从系统时钟或类似的东西上进行测量

然后,不管机器(和JS实现)有多慢或多忙,您总会看到一个精确的计时器1——只是更新频率较低的计时器



1当然,这只能与系统时钟一样精确。如果Javascript可以访问高性能计时器,如.NET的类或Java的方法,则最好使用这种计时器。

Javascript中的计时不能保证。10毫秒的间隔只有大约10毫秒,很可能每次都会延迟一点点Javascript中计时器的一种方法是在启动计时器时保存一个启动时间戳,然后每10毫秒左右计算一次启动时间戳和当前时间之间的差值,并用格式化值更新页面上的一个元素。

Javascript中的计时是不保证的。10毫秒的间隔只会是大约10毫秒,最有可能的是每次都会延迟一点点。在Javascript中使用计时器的正确方法是在启动计时器时保存一个启动时间戳,然后每10毫秒左右计算一次启动时间戳与当前时间之间的差值,并用格式化值更新页面上的一个元素。

请不要空问类似的问题每个人都会犯愚蠢的错误,这个问题和答案可能在将来对其他人有用。请不要空问这样的问题。每个人都会犯愚蠢的错误,这个问题和答案可能在将来对其他人有用