将 Javascript 计数器从秒更改为毫秒

Posted

技术标签:

【中文标题】将 Javascript 计数器从秒更改为毫秒【英文标题】:Changing Javascript Counter From Seconds To Milliseconds 【发布时间】:2013-08-13 01:02:37 【问题描述】:

因此,我正在摆弄我一周前发现的这段代码,因为它能够“在某种程度上”完成旧 gmail 文件计数器的外观。我未能使计数器以比每秒更快的速度准确增加。

通过编辑代码中最低的 1000 [在 setTimeout(function()thisobj.start(), 1000) 中找到],计数器的计数速度要快得多,但是在刷新时它会恢复到它开始时的位置附近秒或两秒(取决于从开始到刷新的时间)。

<html>
<head>
    <script type="text/javascript">
        function countup(startingdate, base) 
            this.currentTime = new Date();
            this.startingdate = new Date(startingdate);
            this.base = base;
            this.start();
        

        countup.prototype.oncountup = function();

        countup.prototype.start = function() 
            var thisobj = this,            
                timediff = (this.currentTime-this.startingdate) / 1000,
                secondfield = Math.floor((timediff));
                result =  seconds: secondfield ;

            this.currentTime.setSeconds(this.currentTime.getSeconds() + 1);
            this.oncountup(result);

            setTimeout(function()
                thisobj.start();
            , 1000);
        ;
    </script>
</head>

<body>
    <div id="holder"></div>

    <script type="text/javascript">
        var startDate = new countup("August 3, 2013 18:59:00", "seconds") // Change starting Date Here

        startDate.oncountup= function(result) 
            var mycountainer = document.getElementById("holder");
            mycountainer.innerHTML =+ result['seconds'];
        
    </script>
</body>
</html>

我相当肯定这可以更改为以毫秒为单位计数,从而以每秒一定数量的更快速度增加。

提前致谢!

【问题讨论】:

如果您最初编写了代码,这应该是微不足道的或者是大量的工作。但是,浏览器将无法满足您的要求。 这个问题似乎是题外话,因为它是关于修改提问者的代码(对未来的读者没有用) 【参考方案1】:

在这一行:

this.currentTime.setSeconds(this.currentTime.getSeconds() + 1);

代码更新其currentTime,将其设置为向前一秒。该函数每秒执行一次,因此其效果就像获取当前时间一样。

如果您将其更改为每 0.5 秒运行一次,它会将秒数提前两倍,从而在您刷新页面时导致它倒退。如果你让它运行 3 秒,它会增加 6 秒,所以如果你重新加载它,那么在获取当前时间时时钟似乎会倒退 3 秒。

由于某种原因,代码没有通过调用new Date() 来获取当前日期(性能?内存管理?),因此您必须更改它如何将currentTime 向前移动以修复错误,以毫秒而不是秒为单位进行增量,如下所示:

    this.currentTime.setMilliseconds(this.currentTime.getMilliseconds()+500);
    var timediff=(this.currentTime-this.startingdate)/500;
    var secondfield=Math.floor((timediff));
    var result=halfSeconds:secondfield;
    this.oncountup(result);
    setTimeout(function()thisobj.start(), 500);

这将使它每 0.5 秒增加 1。

【讨论】:

以上是关于将 Javascript 计数器从秒更改为毫秒的主要内容,如果未能解决你的问题,请参考以下文章

从秒级查询提升到了毫秒级-财务平台logstash同步ES实战笔记

std::chrono::duration_cast - 比纳秒更精确的单位?

为啥 MySQL 不支持毫秒/微秒精度?

在php中显示小时:分钟:秒:毫秒

将跑步速度从秒/米转换为分钟/英里

如何使用查询性能计数器?