慢速javascript时间计数器在手机上

时间:2015-01-15 21:01:54

标签: javascript html5

我在javascript中制作一个可在手机上运行的计数器,它可以在我的电脑上运行,但在我的手机上,计数器从0到2到4等...

我真的需要这个计时器才能工作,我似乎无法在任何地方找到答案。代码在我的计算机上运行,​​但我认为手机上的Javascript很慢。有没有Javascript的替代品,也许还有一些我不知道的HTML5代码?

我将此脚本放在正文标记中。

<script type="text/javascript">
    var time = 0;
    setInterval(
        function () {
            time += 1;
            document.getElementById("timer").innerHTML = time;
        }, 1000
    );
</script>

3 个答案:

答案 0 :(得分:0)

将开始时间存储为自纪元以来的时间,该时间由Date.now()函数调用返回。用它来计算每次通话的时差。这不能保证更好地工作,因为你描述的问题是处理速度的问题,但你至少会保持每次通话的正确时间,它不会跳过秒。

存储开始时间:

var startTime = Date.now();

计算自上次通话以来的时差:

var time = Date.now() - startTime;

现在时间以毫秒为单位,您必须将其除以1000并将其四舍五入以丢失小数位:

var seconds = Math.round(time / 1000);

jsfiddle上的示例(在iPhone 6上的Chrome中测试,按预期工作)。

答案 1 :(得分:0)

这是一个简单的反例

function countdown(elementName, minutes, seconds) {
var element,endTime,hours,mins,msLeft,time;
function twoDigits(n) {
    return (n <= 9 ? "0" + n : n);
}
function updateTimer() {
    msLeft = endTime - (+new Date);
    if (msLeft < 1000) {
        element.innerHTML = "countdown's over!";
    } else {
        time = new Date(msLeft);
        hours = time.getUTCHours();
        mins = time.getUTCMinutes();
        element.innerHTML = (hours ? hours + ':' + twoDigits(mins) : mins) + ':' + twoDigits(time.getUTCSeconds());
        setTimeout(updateTimer, time.getUTCMilliseconds() + 500);
    }
}element = document.getElementById(elementName);
endTime = (+new Date) + 1000 * (60 * minutes + seconds) + 500;
updateTimer();}
  

调用函数

countdown("countdown", 1, 5);
countdown("countdown2", 100, 0);

答案 2 :(得分:-2)

优化是选择计时器并将其分配给维护的变量。然后使用变量而不是每次都执行getElementById调用。 DOM操作可能很昂贵,在移动设备上可能尤其如此(取决于设备和DOM)。

试试这个:

<script type="text/javascript">
    var time = 0;
    var timer= document.getElementById("timer");
    setInterval(
        function () {
            time += 1;
            timer.innerHTML = time;
    }, 1000
);