2012-02-13 2 views
0

Попытка сделать простой таймер подсчета в jQuery ... такого рода работы, но добавление чисел в конец «0000», и я хочу, чтобы он пошел '0001' '0002' '0003' и т. Д. ...Простой таймер подсчета времени jQuery, пожалуйста,

Все это происходит в области jQuery onReady.

var i = '0000' 
var timer = function doSomething () 
{ 
    i = i+= 1 
    $('.counter').text(i); 
    console.log(i); 

} 
setInterval (timer, 1000); 
+0

Advice: 1. Использование запятой для завершения вашей линии. Они не являются обязательными, но на самом деле (прочитайте Javascript для хороших частей для чего). 2. Всегда держите фигурные скобки на одной линии. Это не стиль, привязки на новой строке могут вызвать странные ошибки. 3. В вашей функции в настоящее время есть 2 имени, просто используйте один - вы можете делать 'function() {...' 3. вы каждый раз сканируете весь документ для '$ (. Counter)', вы должны сохранить это в переменной, чтобы вам не пришлось сканировать. –

+0

@GeorgeMauer Понимание ситуаций, в которых разрыв строки * не заканчивается, более важно, чем всегда слепо использовать точки с запятой, потому что даже те, кто использует точки с запятой, будут по-прежнему включать в себя некоторые утверждения, которые охватывают несколько строк. В этих случаях ставить точку с запятой в конец не спасет вас. См. [Эту замечательную статью] (http://blog.izs.me/post/2353458699/an-open-letter-to-javascript-leaders-regarding) – benekastah

+0

Минусы разрывов строк и полуколоней были не тем, что я собирался здесь, но я ценю совет. –

ответ

1

Ваш текущий код добавляется к строке, а не к числу. Он по существу выглядит как

i = '0000' + 1, i = '00001' + 1, i = '000011' + 1 ... 

и так далее. Вам нужно будет сохранить его на целой основе, чтобы продолжить добавление к числу. Вот пример с форматированием, который похож на вас.

var pad = function(n) { return (''+n).length<4?pad('0'+n):n; }; 

jQuery.fn.timer = function() { 
    var t = this, i = 0; 
    setInterval(function() { 
     t.text(pad(i++)); 
    }, 1000); 
}; 

$('#timer').timer(); 

http://jsfiddle.net/jDaTK/

3

Ваша переменная i должна быть целым числом. Вы можете отформатировать его, как вам нравится, когда вы хотите его распечатать.

$(document).ready(function() { 
    var i = 0; 
    var target = $('.counter'); 
    var timer = function doSomething () 
    { 
     i++; 

     var output = pad(i,4); 
     target.text(output); 
     console.log(output); 

    } 
    setInterval (timer, 1000); 
}); 


    function pad(number, length) { 

     var str = '' + number; 
     while (str.length < length) { 
      str = '0' + str; 
     } 
     return str; 

    }​ 
+0

Это на самом деле очень элегантный. Большое вам спасибо за показ. Является ли это сканирование всего документа каждый раз, когда он обновляется, ища «counter» div? –

+0

Это так.В общем, я бы не стал слишком беспокоиться о проблемах с производительностью, если вы на самом деле их не встретили. Если вы хотите этого избежать, вы можете сохранить селектор jquery в переменной вроде этого (обязательно сделайте это за пределами функции таймера): var target = $ ('. Counter'); то вы можете сказать target.text (output), чтобы обновить его. Я редактировал код, чтобы показать это. –

0

Я хотел бы сделать что-то больше, как это:

// Make sure Date.now exists in your environment 
Date.now = Date.now || function() { return Number(new Date()); }; 

var time = 0, 
start = Date.now(), 
intervalId; 

intervalId = setInterval(function() { 
    var seconds, display; 
    // get the exact time since the timer was started 
    time = Date.now() - start; 
    // get the number or seconds, rounded down 
    seconds = Math.floor(time/1000); 
    display = '' + seconds; 

    // pad the beginning of your display string with zeros 
    while (display.length < 4) { 
    display = "0" + display; 
    } 
    console.log(display); 
}, 100); 

setInterval не является точным. Этот код гарантирует, что пока дисплей может быть почти до второго (теоретически), фактическое время, которое вы отслеживаете, - это точное время, прошедшее с момента запуска таймера. Но этот код обновлял бы дисплей примерно раз в десятую часть секунды, поэтому он вряд ли когда-либо будет выключен более чем за несколько миллисекунд.

Отсюда вы можете найти более разумные способы обновления дисплея, чтобы убедиться, что у вас есть необходимый уровень точности. Если это должно быть довольно точным, вы можете убедиться, что вы показываете десятую часть секунды.

+0

Это работает (и спасибо вам большое), но кажется таким странным. Зачем нам что-то делать. Разве мы не можем принять действительное число 0000 и добавить его к 0001? без создания частей этой строки? –

+0

Число '0000' равно' 0', поэтому '0000' должно быть строкой, если вы хотите, чтобы начальные нули. '' 0000 '+ 1' просто добавляет '1' в конец строки, давая вам' 00001''. Однако '1 + 1' дает вам' 2', что является правильным значением, но оно не отображается с ведущими нулями. Решение состоит в том, чтобы вычислить значение как числа, но затем отобразить его как строку. В этом решении значение будет преобразовано в строку, а затем будут добавлены нули в начале до тех пор, пока длина строки не будет равна 4. В этот момент у вас есть правильное значение с соответствующим количеством ведущих нулей. – benekastah

0

Я действительно рекомендую плагин jQuery CountUp. Я пытался несколько счетчиков Javascript и это был один из самых простых в реализации и пришли с большим количеством лакомства:

<script type="text/javascript"> 
    $(document).ready(function(){ 
     $('#counter').countUp({ 
      'lang':'en', 'format':'full', 'sinceDate': '22/07/2008-00::00'; 
     }); 
    }); 
</script>   

<div id="counter"></div> 
+0

Эй, ссылка не работает. Это бросает 404! ошибка. –

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