【问题标题】:javascript timer errorjavascript计时器错误
【发布时间】:2010-11-09 04:46:50
【问题描述】:

我开始使用计时器来显示人们在我的页面上停留了多长时间。问题是它没有计算秒数,而是不断在末尾添加零。谁能告诉我哪里出错了?

<script language="javascript">
<!--
var seconds = 0
var minutes = 0
document.getElementById('timer').innerHTML = '0'
function Timer() {
    if ( seconds < 10 ) {
        seconds = "0" + seconds
    }
    else if ( minutes < 10 ) {
        minutes = "0" + minutes
    }
    else if ( seconds >= 59 ){
        seconds = 0
        minutes += 1
    }
    else
        seconds += 1
        document.getElementById('timer').innerHTML = "You've been on my blog for    "+minutes+" : "+seconds+" minutes."
        setTimeout("Timer()",1000)
}
//-->
</script>

【问题讨论】:

    标签: javascript timer


    【解决方案1】:

    是的,因为您正在连接一个字符串。 + 运算符同时进行连接和加法。

    "0" + foo  // concatenate the string "0" and foo
    0 + foo    // add foo to 0 (given that both are numbers)
    

    不过,您以错误的方式处理计时器。您的脚本不能保证按时执行,任何轻微的执行延迟都会给您累积错误的值。做计时器的正确方法是取一个固定的开始时间,并以此为基数,每秒左右计算一次差值。

    var start = Date.now();
    function timer() {
        alert(((Date.now() - start) / 1000) + ' seconds elapsed');
    }
    setInterval(timer, 1000);
    

    【讨论】:

    • 你打败了我。仅添加 parseInt() 会在必要时从字符串中获取 int val。
    • 但是我要在秒和分钟前添加一个前导零,直到它们超过 10,因此,例如,5 分 3 秒不是 5:3,而是 05:03,不会不是必须是一个字符串吗?
    • @Tommy 首先,您需要正确跟踪数值。用前导零格式化时间是一个单独的问题。
    【解决方案2】:

    您正在将变量类型切换为几秒钟:

    var seconds = 0  // integer type
    ....
    seconds = "0" + seconds // now seconds is holding a string!
    

    秒(和分钟)只能是整数。

    另外,只关注秒数。稍后,将其除以 60 以显示分钟数。 seconds % 60 将是剩余的秒数。

    【讨论】:

      猜你喜欢
      • 2018-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多