Есть код секундомера на яваскрипт, подскажите как сделать чтобы секундомер стартовал не с 0, а сразу плюсовал к своей работе заданное время. То есть допустим я передаю в функцию startTIME() время в формате 2015-04-01 21:52:16, и секундомер начиная свою работу пишет что уже прошло несколько часов. то есть сначала отнимает от текущего времени заданную дату 2015-04-01 21:52:16, потом пишет разницу и после чего начинает отсчет. Код (PHP): <script language="JavaScript" type="text/javascript"> //объявляем переменные var base = 60; var clocktimer,dateObj,dh,dm,ds,ms; var readout=''; var h=1, m=1, tm=1,s=0,ts=0,ms=0,show=true, init=0, ii=0; //функция для очистки поля function clearСlock() { clearTimeout(clocktimer); h=1;m=1;tm=1;s=0;ts=0;ms=0; init=0;show=true; readout='00:00:00.00'; document.TestForm.stopwatch.value=readout; ii = 0; } //функция для старта секундомера function startTIME() { var cdateObj = new Date(); var t = (cdateObj.getTime() - dateObj.getTime())-(s*1000); if (t>999) { s++; } if (s>=(m*base)) { ts=0; m++; } else { ts=parseInt((ms/100)+s); if(ts>=base) { ts=ts-((m-1)*base); } } if (m>(h*base)) { tm=1; h++; } else { tm=parseInt((ms/100)+m); if(tm>=base) { tm=tm-((h-1)*base); } } ms = Math.round(t/10); if (ms>99) {ms=0;} if (ms==0) {ms='00';} if (ms>0&&ms<=9) { ms = '0'+ms; } if (ts>0) { ds = ts; if (ts<10) { ds = '0'+ts; }} else { ds = '00'; } dm=tm-1; if (dm>0) { if (dm<10) { dm = '0'+dm; }} else { dm = '00'; } dh=h-1; if (dh>0) { if (dh<10) { dh = '0'+dh; }} else { dh = '00'; } readout = dh + ':' + dm + ':' + ds + '.' + ms; if (show==true) { document.TestForm.stopwatch.value = readout; } clocktimer = setTimeout("startTIME()",1); } //функция для паузы function pause() { if (init==0) { dateObj = new Date(); startTIME(); init=1; } else { if(show==true) { show=false; } else { show=true; } } } </script> <form name=TestForm> <input type=button value="Обнулить" onclick="clearСlock()"> <input name=stopwatch size=10 value="00:00:00.00"> <input type=button value="Запуск/Остановить" onclick="pause()"> </form>
Весь этот кодище - это секундомер? Вот, накидал тебе простенький секундомер, выводящий циферку в body. Отталкивайся от него: Код (PHP): function Stopwatch(){ var stopwatch_value = 0; var interval; this.start = function(start_from){ stopwatch_value = start_from||0; interval = setInterval(function(){ stopwatch_value++; document.body.innerText = stopwatch_value; }, 1000); }; this.stop = function(){ clearInterval(interval); }; } var stopwatch = new Stopwatch(); stopwatch.start(); //Запускаем таймер. Тикать будет по секундам. Если передать в этот метод число, то отсчет будет идти от него. stopwatch.stop(); //Стопаем таймер.
не увидел никаких циферок в body что не так делаю? поместил код над тегом body и значение stopwatch_value только один раз появляется по идее где то должен быть цикл, а его нет? Код (Text): <html><script> function Stopwatch(){ var stopwatch_value = 0; var interval; this.start = function(start_from){ stopwatch_value = start_from||0; interval = setInterval(function(){ stopwatch_value++; document.body.innerText = stopwatch_value; }, 1000); }; this.stop = function(){ clearInterval(interval); }; alert(stopwatch_value); } var stopwatch = new Stopwatch(); stopwatch.start(); //Запускаем таймер. Тикать будет по секундам. Если передать в этот метод число, то отсчет будет идти от него. stopwatch.stop(); //Стопаем таймер. </script> <body></body></html>
Тебя тут ничего не смутило? Например то, что в одной строчке мы таймер запускаем, а в другой сразу стопаем, как бы между прочим? Убери stopwatch.stop() - таймер будет тикать. Добавлено спустя 47 секунд: Не должно быть никакого цикла нигде. Добавлено спустя 1 минуту 42 секунды: Вот. Добавлено спустя 5 минут 7 секунд: А это используйте для адаптирования под свои нужды: http://javascript.ru/Date Методы почитайте внимательно. Ручной разбор даты и ручная сборка обратно, которая у вас в коде - это ад адский. Для получения числа из даты и даты из числа в JS предусмотрены готовые решения.
ну так не тикает ничего у меня вот так запускаю Код (Text): function Stopwatch(){ var stopwatch_value = 0; var interval; this.start = function(start_from){ stopwatch_value = start_from||0; interval = setInterval(function(){ stopwatch_value++; document.body.innerText = stopwatch_value; }, 1000); }; this.stop = function(){ clearInterval(interval); }; alert(stopwatch_value); } var stopwatch = new Stopwatch(); stopwatch.start(); //Запускаем таймер. Тикать будет по секундам. Если передать в этот метод число, то отсчет будет идти от него. //stopwatch.stop(); //Стопаем таймер. </script> <body></body></html> один раз всплывающее окно с 0 появляеться и дальше ничего не тикает
Ты вставляешь скрипт до body и хочешь, чтобы он обрабатывал body... Ты JS совсем не знаешь, верно? Хочешь, чтобы работало с body, но было загружено до него, вешай вызов на onload-событие. Я оставлял ссылку, но ты не заметил, видимо. ВОТ СЮДА КЛИКНИ СПРАВА ВНИЗУ СМОТРИ РАБОТАЕТ КАК ЧАСЫ.
Fell-x27 Уже хотел писать что опять ничего не работает, пробовал как только можно!! но запустил все в IE и там действительно счетчик тикает!!! Но почему в firefox ничего не работает? это как бы мой основной браузер для него все пишу
Поместил ничего не появляется и не тикает в firefox Код (Text): <html> <body> <script> function Stopwatch(){ var stopwatch_value = 0; var interval; this.start = function(start_from){ stopwatch_value = start_from||0; interval = setInterval(function(){ stopwatch_value++; document.body.innerText = stopwatch_value; }, 1000); }; this.stop = function(){ clearInterval(interval); }; //alert(stopwatch_value); } var stopwatch = new Stopwatch(); stopwatch.start(); //Запускаем таймер. Тикать будет по секундам. Если передать в этот метод число, то отсчет будет идти от него. //stopwatch.stop(); //Стопаем таймер. </script> </body> </html>
Значит за body ставь. Или прикрути к onload. Код (Text): <html> <body> </body> <script> function Stopwatch(){ var stopwatch_value = 0; var interval; this.start = function(start_from){ stopwatch_value = start_from||0; interval = setInterval(function(){ stopwatch_value++; document.body.innerText = stopwatch_value; }, 1000); }; this.stop = function(){ clearInterval(interval); }; } var stopwatch = new Stopwatch(); stopwatch.start(); //Запускаем таймер. Тикать будет по секундам. Если передать в этот метод число, то отсчет будет идти от него. //stopwatch.stop(); //Стопаем таймер. </script> </html> Добавлено спустя 1 минуту 34 секунды: Или прикрути к onload. Код (Text): <html> <body onload="var stopwatch = new Stopwatch(); stopwatch.start();"> <script> function Stopwatch(){ var stopwatch_value = 0; var interval; this.start = function(start_from){ stopwatch_value = start_from||0; interval = setInterval(function(){ stopwatch_value++; document.body.innerText = stopwatch_value; }, 1000); }; this.stop = function(){ clearInterval(interval); }; } </script> </body> </html> Добавлено спустя 49 секунд: Чувак, если у тебя такая проблема с такой фигней, как запуск скрипта, ты уверен, что сможешь его: 1) Разобрать. 2) Адаптировать. ? В ОП-посте не твой код, верно?
В Firefox 36.0.4 Не работают ОБА варианта, я уже мозг сломал, всегда нормально было с явоскрипт в фаерфоксе!! в чем вообще проблема ?
В файрфоксе и его отношении к document.body.innerText) Добавлено спустя 1 минуту 9 секунд: Код (PHP): <html> <body onload="(function(){var stopwatch = new Stopwatch(); stopwatch.start();})();"> <script> function Stopwatch(){ var stopwatch_value = 0; var interval; this.start = function(start_from){ stopwatch_value = start_from||0; interval = setInterval(function(){ stopwatch_value++; document.body.textContent = stopwatch_value; }, 1000); }; this.stop = function(){ clearInterval(interval); }; } </script> </body> </html> Добавлено спустя 3 минуты 29 секунд: Давай на чистоту, ты и не пытался решить проблему. Обновление странички и ожидание чуда - не считается.
Fell-x27 Вот теперь код работает ВЕЗДЕ большое спасибо! Он конечно более короткий и простой понятно куда передавать начальное значение, но как сделать так чтобы время делилось на минуты и часы? опять возвращаться к моему громоздкому примеру ?
Fell-x27 Изучил функцию Date, она для этого не подходит то есть получаться нужно делать примерно то что у меня и было просто арифметически делить секунды на 3600 чтоб получить часы и 60 чтоб получить минуты ?
Автор, в общем гляди, есть у меня полностью готовое решение. Было нефиг делать, дай думаю, запилю. Даже с той же формочкой, что твой монстр. И позволяющее вводить дату, чтобы отсчет велся от нее. И, в отличие от решения, которое ты взял не знаю где, но точно делал не сам, при остановке секундомера, действительно останавливает его. И после повторного запуска, начинает с того же места, а не как если бы остановки не было вовсе. Ну и кнопка "обнулить" у меня работает в реалтайме, не вызывая остановку выполнения. Но я хочу сначала увидеть хоть что-то, что ты сам пытался сделать за эти дни. Добавлено спустя 1 минуту 25 секунд: У нее до кучи есть методы. И да, она подходит прекрасно.
Вот сделал готовую функцию все работает как я и хотел функция Date точно тут не подходит не только мое мнение Код (Text): function secudomer() { var chasov = 0; var minut = 0; var sekund = 0; var result = ""; var stopwatch_value = 0; var interval; this.start = function (start_from) { stopwatch_value = start_from || 0; interval = setInterval(function () { stopwatch_value++; chasov = Math.floor(stopwatch_value / 3600); minut = Math.floor((stopwatch_value - chasov * 3600) / 60); sekund = stopwatch_value - (chasov * 3600 + minut * 60); result = "<b>"+chasov + " часов " + minut + " мин " + sekund + " cек</b>"; var SummDok = document.getElementById('secudomer'); var SummDok1 = document.getElementById('secudomer1'); SummDok.innerHTML = result;SummDok1.innerHTML = result; // document.body.textContent = result; }, 1000); }; this.stop = function () { clearInterval(interval); }; }
Оформи плз полностью, с формой, чтобы просто скопировать и проверить. И да, а где в твоем коде: Просто передать циферку - не совсем то, что ты описал. 1) Объясни, почему. 2) Как ты с датой работать собрался без нее? 3) Даже в коде, который ты привел первым, используется Date.
Специально регнулся на jsfiddle.net, чтоб показать )) http://jsfiddle.net/sound777/y1040raa/1/ в функцию передаю просто количество секунд, разницу с текущим временем сделал на пхп
Ну..в плане форматирования вывода куда лучше и правильнее, чем код из первого поста. Смог адаптировать код, который был выдан позднее, молоток. Вот что я накидал: 1) В поле ввода можно вводить дату в любом из известных стандартов. 2015-04-01 21:52:16 из первого поста подойдет. А можно хоть 1 april 2015 вбить. 2) А можно не вводить, отсчет пойдет с нуля. 3) Ну и кнопочки управления, мимими. 4) И не требует сервер для пробивания стартовой точки. Полностью клиентсайд. https://jsfiddle.net/dmnxpjuh/
Спасибо большое за код, парни, как раз искал что то подобное, а вы к довольно простому и изящному решению пришли.