javascript - 如何阻止 60 秒计时器成为 "jumpy"(css/javascript)

标签 javascript html css countdowntimer gsap

我在 javascript 中创建了一个“60 秒”倒计时计时器,我正在尝试弄清楚如何让它不“跳动”。主要问题是字体字符的宽度不一致。我看到的唯一方法是以某种方式将每个字符附加到它自己的 div 中,并通过 css 控制该 div 的宽度。但我真的不确定该怎么做。对此有更好的方法吗?

我知道 Greensock 的“TweenMax”插件可以处理这个问题,但我想自己创建这个,而不是为一件小事使用库。

jsFiddle:** http://jsfiddle.net/oneeezy/3CreM/1/

HTML:

<div class="row">
    <span class="timer timerback">00:00</span>
    <span id="Timer" class="timer timerfront">60:00</span>
    <span class="seconds">Seconds</span>
</div>

JavaScript:

var count = 6000;
var counter = setInterval(timer, 10);

function timer()
{
    if (count <= 0)
    {
        clearInterval(counter);
        return;
     }
     count--;
     document.getElementById("Timer").innerHTML=count /100;
 }

最佳答案

选择等宽字体,使所有字符的宽度相同。最简单的方法是将 font-family: monospace; 添加到计时器元素的 CSS 中。

看看http://www.google.com/fonts/以获得精选的等宽字体。

您还需要对数字应用一些格式,以确保秒数用零填充(即始终为两位数)并且百分之一的尾随零被添加。

顺便说一句,每次调用您的函数时递减一个计数不会产生一个准确的计时器。虽然您将间隔设置为 10 毫秒,但不能保证该函数会恰好每 10 毫秒调用一次,因此您的计时器会漂移,尤其是当页面上还有其他脚本时。你应该做的是在循环开始时记录时间,并在每次调用函数时计算该固定时间与当前时间之间的差值。这保证不会漂移。

关于javascript - 如何阻止 60 秒计时器成为 "jumpy"(css/javascript),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25103210/

相关文章:

javascript - 正则表达式至少匹配一个字符或一个空格

javascript - 如何在 ng-click 中传递 php 对象

html - 导航栏下的组件

html - 左/右定位考虑了边框大小

javascript - IE 中的冒泡事件

javascript - 这个js外壳是如何工作的?

javascript - 使用输入文件更改 img 标签的 src

html - 粘性页脚行为怪异

列元素上的 CSS 3 动画 "transform: scale"在 chrome 上不起作用

jquery - 流体布局 : Divs with height:auto and dynamic content