0

所以我在摆弄我一周前发现的这段代码,因为它能够“在某种程度上”完成旧 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>

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

提前致谢!

4

1 回答 1

0

在这一行:

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。

于 2013-08-13T03:37:53.903 回答