2015-01-15 3 views
-1

Я делаю счетчик в 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> 
+4

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

+0

@RichBradshaw Спасибо, я нашел решение. Я бы «принимал ответ», если бы мог :) – Carl

+0

Вы можете написать ответ на свой ответ и принять его от вас :) –

ответ

-2

Оптимизация будет для выбора таймера и присвоить его переменной, которая поддерживается. Затем используйте переменную вместо вызова getElementById каждый раз. DOM-манипуляция может быть дорогостоящей и может быть особенно на мобильном устройстве (в зависимости от устройства и DOM).

Попробуйте это:

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

+0

Это не решает проблему. И это даже не такая оптимизация, 'getElementById' должен работать быстро, так как id должен быть уникальным, поэтому он сопоставим с доступом к хэш-карте. –

+0

Это, безусловно, будет быстрее оригинала. Быстрый поиск, работающий все время, все еще работает все время. –

0

магазин время начала, как время с начала эпохи, которая возвращается при вызове функции Date.now(). Используйте это, чтобы рассчитать разницу во времени для каждого вызова. Это не гарантирует, что вы будете работать лучше, потому что проблема, которую вы описываете, представляет собой проблему с скоростью обработки, но вы, по крайней мере, будете поддерживать нужное время при каждом вызове, оно не будет пропускать секунды.

Магазин время начала:

var startTime = Date.now(); 

Разница во времени Расчет времени предыдущего вызова:

var time = Date.now() - startTime; 

Время теперь в миллисекундах, вы должны разделить его на 1000 и вокруг него, чтобы потерять десятичную мест:

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

Пример на jsfiddle (проверено в Chrome на iPhone 6, работает как ожидалось).

+0

Я все еще получаю подсчет 0, 2, 4, 6. Когда я прокручиваю или коснуюсь экрана, он работает так, как ожидалось. – Carl

+0

Какой телефон или браузер вы используете? –

+0

HTC Desire и браузер по умолчанию.Я тестирую его на плохом телефоне, потому что я предполагаю, что если он работает на плохом телефоне, он будет работать на хорошем телефоне. Но я проверю его на столько телефонов, сколько могу, прежде чем выпустить его. – Carl

0

это простой счетчик exapmple

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); 
Смежные вопросы