Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 01.08.2015, 17:41
Новичок на форуме
Отправить личное сообщение для AlexSoul Посмотреть профиль Найти все сообщения от AlexSoul
 
Регистрация: 26.07.2015
Сообщений: 8

Многострочный таймер
Здравствуйте. Требуется сделать несколько таймеров на странице идущих параллельно. Но при добавлении последующих таймеров время сбрасывается и идет отсчет не того времени, а как у первого таймера

<span id="AJ" style="color: #f00; font-size: 120%; font-weight: bold;">01:01:00</span>
<input type="button" value="Запуск" onClick=startTimer("AJ",1) >
<input type="button" value="Сбросить" onClick=startTimer("AJ",3) >

<span id="AL" style="color: #f00; font-size: 120%; font-weight: bold;">02:00:00</span>
<input type="button" value="Запуск" onClick=startTimer("AL",1) >
<input type="button" value="Сбросить" onClick=startTimer("AL",3) >

<span id="AV" style="color: #f00; font-size: 120%; font-weight: bold;">02:05:00</span>
<input type="button" value="Запуск" onClick=startTimer("AV",1) >
<input type="button" value="Сбросить" onClick=startTimer("AV",3) >

<script type="text/javascript">
(function() {
 
function getElem_Time(outElem) {
     var arr = outElem.innerHTML.split(':')
     return 1000*(3600*(+arr[0])+60*(+arr[1])+(+arr[2]));
}
 
function two_dig (t) {
     return  (parseInt(t)/100).toFixed(2).toString().split('.')[1];
}
 
function getHH_MM_SS(sek) {
     return two_dig (sek/3600)+  ':' + two_dig ((sek/60)%60)+ ':' + two_dig (sek%60);
}
 
var timerId;        // ID setInterval
var firstSaveVal;   // Тут сохраняем начальное значение Time из элемента;
var  endDate     =  localStorage.endDate;
 
 
startTimer = function(sel,test){    //test == 1 при запуске по кнопке и == 0 при автозапуске на новой странице, 3 - сброс;
 
  var outElem = document.getElementById(sel); //объект вывода/ввода цифр
  clearInterval(timerId);
 
  if(!firstSaveVal)firstSaveVal = outElem.innerHTML;
 
  if(test == 2) {delete localStorage.endDate; return}
 
  if(test == 3) {outElem.innerHTML = firstSaveVal; delete localStorage.endDate; return}
 
  if(!endDate &&!test) return false; //Aвтозапуск на новой странице;
 
  var deltaT = getElem_Time(outElem);
 
  if(test){
     outElem.innerHTML = firstSaveVal;
     deltaT = getElem_Time(outElem);
     delete localStorage.endDate;
     endDate = localStorage.endDate;
  }
 
  var thisTime = +new Date();
 
  if(!endDate){
    var timeEnd = thisTime + deltaT;
    localStorage.endDate = sel+','+ timeEnd;
  }
 
  if(endDate &&!test){
     var arr = endDate.split(',');
     var outElem = document.getElementById(arr[0]);
     var timeEnd = +arr[1];
  }
 
 
  function setOutTime(){
    if(+new Date()>=timeEnd){
       alert("Время вышло");
       clearInterval(timerId);
       outElem.innerHTML='00:00:00';
       delete localStorage.endDate;
       return;
    }
    var timeToFinish = parseInt((timeEnd - +new Date())/1000);
    outElem.innerHTML = getHH_MM_SS(timeToFinish);
 }  setOutTime();
   
 
  timerId = setInterval(setOutTime,1000);
 
 
}
 
  startTimer("AJ",0);
  window.onfocus =   function (){startTimer("AJ",0); } 

  startTimer("AL",0); 
  window.onfocus =   function (){startTimer("AL",0); } 

  startTimer("AV",0); 
  window.onfocus =   function (){startTimer("AV",0); } 
   
}());
</script>


подскажите пожалуйста как переделать код так, чтобы можно было запускать несколько таймеров...в джаваскрипт не силён поэтому прошу строго не судить
Ответить с цитированием
  #2 (permalink)  
Старый 04.08.2015, 12:47
Профессор
Отправить личное сообщение для krasovsky Посмотреть профиль Найти все сообщения от krasovsky
 
Регистрация: 21.12.2012
Сообщений: 869

Этот пример тебе расскажет почему так происходит
var  a= 1;
alert(a)
a = 2
alert(a)
Ответить с цитированием
  #3 (permalink)  
Старый 04.08.2015, 16:50
Новичок на форуме
Отправить личное сообщение для AlexSoul Посмотреть профиль Найти все сообщения от AlexSoul
 
Регистрация: 26.07.2015
Сообщений: 8

krasovsky,
Почему так происходит я более или менее понимаю...проблема в том что я не знаю как это исправить, и можно ли вообще так сделать.
Ответить с цитированием
  #4 (permalink)  
Старый 05.08.2015, 07:26
Профессор
Отправить личное сообщение для krasovsky Посмотреть профиль Найти все сообщения от krasovsky
 
Регистрация: 21.12.2012
Сообщений: 869

Создавать для каждого таймера свою переменную. Но я тебе скажу сразу что синхронными они не будут.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нашёл таймер нужна помощь. VERDANT Элементы интерфейса 12 08.07.2015 14:25
помогите чтобы таймер тикал Руслан904322 Общие вопросы Javascript 1 22.02.2015 12:43
Обновляемый таймер на javascript smillyhamster Общие вопросы Javascript 1 31.12.2013 10:30
Зацикленный таймер jacko Общие вопросы Javascript 2 01.07.2012 14:32
Как два раза вставить таймер alexvost Общие вопросы Javascript 2 08.02.2011 02:28