2013-05-29 2 views
0
<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> 

Это время, то есть подсчет количества секунд.
Это показано в ЧЧ: ММ: СС.
Может ли кто-нибудь укоротить его или ускорить его (я имею в виду лучшую производительность)?(Сократить это) Javascript Сроки

Этот код имеет задержку 100 мс каждые 15 минут. Следующие ответы имеют сходные временные задержки. Это время не имеет значения. Вы можете легко откалибровать время, если хотите.

+1

Является ли это вопросом кодового гольфа или вы хотите, чтобы это было сделано по любой другой причине? – Dogbert

+0

Почему вы затем определяете свою функцию? –

+1

"ускорить его (я имею в виду меньше строк)" Итак, производительность здесь не метрика? Вы знаете, что даже короткий код может привести к ужасной производительности, если все сделано неправильно? Короткий код не означает быстрый код. Или вам действительно нужно ускорить это? Однако обычный способ - написать более читаемый код. Короткие коды часто загромождают и нечитаемы ... –

ответ

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.

И тогда вы можете уродовать его (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 линия

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(); 
} 

Edit: Удалить избыточное определение функции> вызова (всего -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); 
     })(); 
} 
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> 
+0

Это не то, что мне нужно. Вы могли видеть, что это был однострочный код, и я просто разбил его на строки, чтобы вставить здесь и задать этот вопрос –

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.value на node.textContent, если необходимо.

Смежные вопросы