Помогите улучшить таймер. Работает только когда пользователь на странице 
		
		
		
		Прошу помощи в добавлении функции проверки: на странице ли пользователь или нет. 
	если нет то таймер стоит и ждет когда пользователь зайдет. Сам таймер: 
function startClock() {
        if (vtime == stattime) {
            document.getElementById('blockwait').style.display = 'none';
            document.getElementById('blocktimer').style.display = '';
        }
        if (vtime >= 0) {
            document.forms['frm'].clock.value = vtime;
            vtime --;
            tm = setTimeout("startClock(0)", 1000);
        } else {
            if (tm)
                clearTimeout(tm);
        }
    }
Нашел вот такой вариант с созданием переменной mya: 
window.onfocus = function(){ mya = true; }   
window.onblur = function(){ mya = false; }
но как это реализовать в моем таймере у меня не выходит :-? Плюс у меня еще есть php переменная $add_bonus = 1 или 0; Так вот нужно сделать что когда $add_bonus = 1 то таймер останавливается при переходе на другую вкладку, а когда на 0 то продолжает идти.  | 
	
		
 crystaltrumpet, 
	if (vtime >= 0 && mya ) window.onfocus = function(){ mya = true; startClock()} window.onblur = function(){ mya = false; clearTimeout(tm);}  | 
	
		
 Я сделал так Вы сказали но видимо где то я ошибся. не хочет работать.: 
	
function startClock() {
    if (vtime == stattime) {
        document.getElementById('blockwait').style.display = 'none';
        document.getElementById('blocktimer').style.display = '';
    }
    var mya = true;
    if (vtime >= 0 && mya ) {
        document.forms['frm'].clock.value = vtime;
        vtime --;
        tm = setTimeout("startClock(0)", 1000);
        window.onfocus = function(){ mya = true; startClock()}
        window.onblur = function(){ mya = false; clearTimeout(tm);}
    } else {
        if (tm)
            clearTimeout(tm);
        nextstep(0, cnt);
    }
}
но что то не работает  | 
	
		
  | 
	
		
 crystaltrumpet, 
	строки 11 и 12 уберите из функции  | 
	
		
 Так а если я их уберу - это же самые главные строки 
	как тогда отлеживать события будут? Я убрал получилось вот так и ничего не работает: 
function startClock() {
    if (vtime == stattime) {
        document.getElementById('blockwait').style.display = 'none';
        document.getElementById('blocktimer').style.display = '';
    }
    var mya = true;
    if (vtime >= 0 && mya ) {
        document.forms['frm'].clock.value = vtime;
        vtime --;
        tm = setTimeout("startClock(0)", 1000);
        
        
    } else {
        if (tm)
            clearTimeout(tm);
        nextstep(0, cnt);
    }
}
 | 
	
		
 crystaltrumpet, 
	а добавить эти строки после скрипта?  | 
	
		
 Сделал вот так - результат не изменился: 
	
function startClock() {
    if (vtime == stattime) {
        document.getElementById('blockwait').style.display = 'none';
        document.getElementById('blocktimer').style.display = '';
    }
    var mya = true;
    if (vtime >= 0 && mya ) {
        document.forms['frm'].clock.value = vtime;
        vtime --;
        tm = setTimeout("startClock(0)", 1000);
        
    } else {
        if (tm)
            clearTimeout(tm);
        nextstep(0, cnt);
    }
}
        window.onfocus = function(){ mya = true; startClock()}
        window.onblur = function(){ mya = false; clearTimeout(tm);}
 | 
	
		
 crystaltrumpet, 
	
var mya = true, tm;
function startClock() {
    clearTimeout(tm);
    if (vtime == stattime) {
        document.getElementById('blockwait').style.display = 'none';
        document.getElementById('blocktimer').style.display = '';
    }
    if (vtime > 0 && mya ) {
        vtime--;
        document.forms['frm'].clock.value = vtime;
        tm = setTimeout(startClock, 1000);
    }
}
 window.onfocus = function(){ mya = true; startClock()}
 window.onblur = function(){ mya = false;}
 | 
	
		
 Не работает - когда я перехожу на соседнюю вкладку - таймер продолжает работать 
	Но когда я на странице кликаю вверху - время останавливается когда внизу - начинает идти http://prntscr.com/lgyrtj  | 
	
		
 Вот структура HTML кода: 
	
<html xmlns="http://www.w3.org/1999/xhtml">
   <head>
    <meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
    <title>Просмотр сайтов</title>
    <meta name="robots" content="none" />
   </head>
   <frameset onLoad="javascript: frame_footer.startClock();" rows="*,70" style="border: none;">
    <frame name="frame_site" src="<?php echo $result['url']; ?>" marginwidth="0" marginheight="0" frameborder="0" />
    <frame name="frame_footer" src="/serf-fblock.php?cnt=<?php echo $_SESSION['view']['cnt']; ?>" marginwidth="0" marginheight="0" scrolling="no" noresize="noresize" frameborder="0" />
   </frameset>
  </html>
 | 
	
		
 crystaltrumpet, 
	более ничем помочь не могу 
<!DOCTYPE html>
<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
</head>
<body>
<div id="blockwait">blockwait</div>
<div id="blocktimer" style="display: none">blocktimer</div>
<form name="frm" action="http://">
<input name="clock">
</form>
<script>
var mya = true, tm, vtime = 5;
function startClock() {
    clearTimeout(tm);
    if (!vtime) {
        document.getElementById('blockwait').style.display = 'none';
        document.getElementById('blocktimer').style.display = '';
    }
    if (vtime >= 0 && mya ) {
        document.forms['frm'].clock.value = vtime;
        vtime--;
        tm = setTimeout(startClock, 1000);
    }
}
startClock()
 window.onfocus = function(){ mya = true; startClock()}
 window.onblur = function(){ mya = false;}
  </script>
</body>
</html>
 | 
	
		
 Рони, спасибо Вам большое и на этом.  
	Вы всегда помогаете, сколько я помню.. К сожалению я не знаю как Ваш скрипт перенести на мой сайт( но спасибо Вам. может ктото еще знает решение ? как переделать функцию?  | 
	
		
 как вариант использовать API браузера https://developer.mozilla.org/en-US/...Visibility_API 
	 | 
	
		
 Ваш вариант с API думаю имеет смысл, но как это совместить с моим таймером? чтобы когда я на странице - таймер шел, когда переключился - таймер ждал... 
	вот маленький код полностью рабочий! на API который я нашел: <div class="container"> <h1 class="title">Hey! You're here. Don't leave</h1> </div> 
var title = document.querySelector('.title');
var handleChange = function handleChange() {
  if (!document.hidden) {
    setTimeout(function () {
      document.body.classList.remove('hidden');
      title.innerText = 'But you\'re back now';
    }, 2000);
  } else {
    document.body.classList.add('hidden');
    title.innerText = 'I missed you';
  }
};
window.addEventListener('visibilitychange', handleChange);
Он работает с полоборота! Помогите совместить этот код с запуском и остановкой функции: 
function startClock() {
    if (vtime == 60) {
        document.getElementById('blockwait').style.display = 'none';
        document.getElementById('blocktimer').style.display = '';
    }
    if (vtime >= 0) {
        document.forms['frm'].clock.value = vtime;
        vtime ++;
        tm = setTimeout("startClock(0)", 1000);
    } else {
        if (tm)
            clearTimeout(tm);
        nextstep(0, cnt);
    }
}
 | 
	
		
 по сути мне нужно реализовать исполнение visibilitychange  но я не могу это сделать? буду благодарен за помощь. 
	 | 
	
		
 crystaltrumpet, 
	:-? 
<!DOCTYPE html>
<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
</head>
<body>
<div id="blockwait">blockwait</div>
<div id="blocktimer" style="display: none">blocktimer</div>
<form name="frm" action="http://">
<input name="clock">
</form>
<script>
var mya = true, tm, vtime = 0;
function startClock() {
    clearTimeout(tm);
    document.forms['frm'].clock.value = vtime;
    if (vtime < 5) {
        !document.hidden && vtime++;
        tm = setTimeout(startClock, 1000);
    }
    else {
       document.getElementById('blockwait').style.display = 'none';
       document.getElementById('blocktimer').style.display = '';
    }
}
startClock()
  </script>
</body>
</html>
 | 
	
		
 Ронни,  к сожалению не работает думаю нужно попробовать реализовать на API  
	может вот такой функцией: 
var handleChange = function handleChange() {
  if (!document.hidden) {
  } else {
  }
};
window.addEventListener('visibilitychange', handleChange);
Может поменяв название функции handleChange на startClock  | 
	
		
 Цитата: 
	
  | 
	
		
 Не работает может потому что я профан в javascript :blink:  
	и я не знаю как совместить Ваш код, который вы переделали с моим: 
function startClock() {
    if (vtime == stattime) {
        document.getElementById('blockwait').style.display = 'none';
        document.getElementById('blocktimer').style.display = '';
    }
    if (vtime >= 0) {
        document.forms['frm'].clock.value = vtime;
        vtime ++;
        tm = setTimeout("startClock(0)", 1000);
    } else {
        if (tm)
            clearTimeout(tm);
        nextstep(0, cnt);
    }
}
хотя логично что был бы не профаном не пришел бы на форум - сам бы сделал уже и не мучал на форуме людей )  | 
	
		
 crystaltrumpet, 
	не знаю что делает ваш код, все попытки понять были выше.  | 
	
		
 М.б. как-то так? 
	
<!DOCTYPE html>
<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8"
</head>
<body>
<form name="frm" action="http://">
<input name="clock">
</form>
<script>
var mya = true, tm, vtime = 0;
function startClock(parm) {
   if (parm == "stop") { 
      clearTimeout(tm);
   }
   else {
      document.forms['frm'].clock.value = vtime;
      vtime++;
      tm = setTimeout(startClock, 1000);
   }
}
startClock("start");
var handleChange = function () {
  if (!document.hidden) {
        startClock("start");
  } else {
        startClock("stop");
  }
};
window.addEventListener('visibilitychange', handleChange);
  </script>
</body>
</html>
 | 
| Часовой пояс GMT +3, время: 02:32. |