【问题标题】:create countdown timer in milliseconds以毫秒为单位创建倒数计时器
【发布时间】:2012-04-11 19:24:44
【问题描述】:

我正在尝试创建一个以年、月、日、小时、分钟、秒和毫秒为单位倒计时的计时器。我在网上找到了一些指南,但它们有点不容易理解,或者不做毫秒。谁能帮我做这样的事情,比如说,这个星期五 13:30。

所以它可以读取 0y 0m 2d 2h 11m 50ms

并倒计时毫秒。我会展示代码来证明我实际上已经尝试过自己这样做,但是这一切都失败得如此惨淡,以至于我会感到尴尬。

我还阅读了this article,这让我有点不信任 JavaScript 计时器。这是真的吗,他们变成了so out of sync

感谢您的帮助!

【问题讨论】:

  • 是的,它们确实不同步了。作为一名系统管理员,我知道计算机时钟在短短几周内就可以在课程中消失(10 或 20 秒)。几个月后,他们分分钟下车。定期同步到标准时间服务器很重要。因此,基于 javascript 的倒计时将取决于您计算机时钟的准确性。
  • 由于您想倒计时很多天,甚至可能是数周数年或数月,您希望该程序在哪里运行?在网络服务器上?在您的台式电脑上?在手机上?
  • 我希望它在台式计算机上运行。当然,不同步问题不是很严重;我只会看 1 秒钟,然后得到我想要的信息。但我认为这是一个有趣的概念,并认为我不妨学习实现它。

标签: javascript jquery


【解决方案1】:

取决于你如何实现它。

如果您读取一次时间并依赖于 setInterval 或/和 setTimeout 的准确性,那么是的 .. 它们可能会不同步。

如果您总是在计算中使用当前时间,那么它可能会像系统的其他部分不同步一样不同步......这意味着它遵循计算机的时钟。

JavaScript / jQuery Countdown 更改我的答案以增加您获得的毫秒数

var end = new Date('13 Apr 2012 13:30:00');

var _second = 1000;
var _minute = _second * 60;
var _hour = _minute * 60;
var _day = _hour *24;
var timer;

function showRemaining()
{
    var now = new Date();
    var distance = end - now;
    if (distance < 0 ) {
       // handle expiry here..
       clearInterval( timer ); // stop the timer from continuing ..
       //alert('Expired'); // alert a message that the timer has expired..
    }
    var days = Math.floor(distance / _day);
    var hours = Math.floor( (distance % _day ) / _hour );
    var minutes = Math.floor( (distance % _hour) / _minute );
    var seconds = Math.floor( (distance % _minute) / _second );
    var milliseconds = distance % _second;

    var countdownElement = document.getElementById('timer');
    countdownElement.innerHTML = days  + 'd ' +
                                 hours + 'h ' +
                                 minutes + 'm ' +
                                 seconds + 's ' +
                                 milliseconds + 'ms';
}

timer = setInterval(showRemaining, 10);

但它不处理月份和年份,因为这需要更复杂的计算来考虑 28-31 天的月份和闰年..

http://jsfiddle.net/TaHtz/2/的演示

【讨论】:

  • 这与 jeffery_the_wind 的解决方案有何不同?
  • @Straseus,不是很......但我在他面前回答,我写了代码;)
  • @GabyakaG.Petrioli 我的错,我以为他在你之前。
  • 是的,我刚刚使用了我在谷歌上搜索到的另一篇文章中的 jsfiddle 代码。开源摇滚!
  • @jeffery_the_wind,确实如此!
【解决方案2】:

试试这个 js 小提琴:http://jsfiddle.net/QH6X8/185/

使用 JavaScript 第一行定义的 end 变量设置结束日期。

如果您不想每 1 毫秒更新一次,那么这里有一个 jsfiddle 每 60 次更新:http://jsfiddle.net/QH6X8/187/

【讨论】:

  • 虽然看起来很甜,但我不推荐使用它。它将我的 CPU 使用率提高到 100%。
  • 哇酷,让我看看我的……我的 CPU 仍然很低……10% 或更少
  • 你每毫秒更新一次 DOM,这如何符合轻量级应用的定义。
  • 每次你的计时器触发它都会导致 10 个解析事件、一个布局和 2 个绘制:S
  • 我的 CPU 保持在 2% 左右。它在我的手机上完全没问题。我认为它真的很整洁。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-12
  • 1970-01-01
  • 2017-07-10
  • 1970-01-01
  • 2016-02-05
  • 2015-12-24
相关资源
最近更新 更多