(缩短这个)Javascript时间

时间:2013-05-29 08:42:32

标签: javascript performance

<script>
window.onload=function(){
function nowTime(){
var s=0,m;
(function(){
s++;
m=Math.floor(s/60);
document.getElementById('t').innerHTML=(Math.floor(m/60))+':'+(m%60)+':'+(s%60);
setTimeout(arguments.callee,1000);
})();}
nowTime();}
</script>
<div id="t"></div>

这是为了计时,即计算经过的秒数 它显示在HH:MM:SS中 任何人都可以缩短它或加速它(我的意思是更好的表现)?

此代码每15分钟延迟100毫秒。以下答案具有类似的时间延迟。这段时间无关紧要。如果需要,可以很容易地校准时间。

4 个答案:

答案 0 :(得分:2)

window.onload = function() {
    var s = 0, m, el = document.getElementById('t');
    (function next() {
        el.innerHTML = ~~((m = ~~(++s / 60)) / 60) + ':' + (m % 60) + ':' + (s % 60);
        setTimeout(next, 1000);
    })();
}
  1. 请勿使用arguments.callee,不推荐使用。
  2. 缓存DOM元素。
  3. Math.floor可以替换为~~
  4. 分配变量是一个表达式,它返回RHS的值,因此您可以在m = ~~(++s / 60)的第一次使用中放置m
  5. 然后你可以丑化它(154个字符):

    window.onload=function(){var n,t=0,e=document.getElementById("t")
    !function o(){e.innerHTML=~~((n=~~(++t/60))/60)+":"+n%60+":"+t%60,setTimeout(o,1e3)}()}
    

    工作演示:http://jsfiddle.net/PN9An/

答案 1 :(得分:1)

-1行

window.onload = function () {
    function nowTime() {
        var s = 0,
            m;
        (function () {
            m = Math.floor(s / 60);
            document.getElementById('t').innerHTML = (Math.floor(m / 60)) + ':' + (m % 60) + ':' + (++s % 60);
            setTimeout(arguments.callee, 1000);
        })();
    }
    nowTime();
}

编辑:删除冗余功能定义&gt;打电话(共3行)

window.onload = function () {
        var s = 0,
            m;
        (function () {
            m = Math.floor(s / 60);
            document.getElementById('t').innerHTML = (Math.floor(m / 60)) + ':' + (m % 60) + ':' + (++s % 60);
            setTimeout(arguments.callee, 1000);
        })();
}

答案 2 :(得分:1)

将所有内容写入一行将导致更少的行:

<script>window.onload=function(){function nowTime(){var s=0,m;(function(){s++;m=Math.floor(s/60);document.getElementById('t').innerHTML=(Math.floor(m/60))+':'+(m%60)+':'+(s%60);setTimeout(arguments.callee,1000);})();}nowTime();}</script><div id="t"></div>

答案 3 :(得分:0)

先生,先生:

var node=document.querySelector("#id");
var s=0,t={h:3600,m:60,s:1};
setInterval(function(){
  var r=s++;
  node.value=['h','m','s'].map(function(k){var v=Math.floor(r/t[k]);r-=v*t[k];return v+k;}).join("");
},1000);

我选择了一个输入元素来发送文本结果。我不确定您要定位的元素类型,因此如果需要,您可能需要更改为node.valuenode.textContent