<span id="my_timer" style="color: #f00; font-size: 100%; font-weight: bold;">02:00:00</span>
<input type="button" value="Запустить таймер" onClick=startTimer("my_timer",1) >
<input type="button" value="Stop" onClick=startTimer("my_timer",2) >
<input type="button" value="Reset" onClick=startTimer("my_timer",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){
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("my_timer",0); //Aвтозапуск на новой странице с проверкой сохранненого в Storage(если нет - return);
window.onfocus = function (){startTimer("my_timer",0); } //При возврате на вкладку, бывшую неактивной
}());
</script>
Для перезапуска (якобы на новой странице) после запуска по кнопке "Запустить таймер", перезапустить по "Посмотреть" , не нажимая кнопки "Запустить таймер" (или иных)