Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   И снова секундомер (https://javascript.ru/forum/misc/23865-i-snova-sekundomer.html)

alexan0308 09.12.2011 09:23

И снова секундомер
 
Пишу игру на яваскрипт, при нажатии на кнопку "Новая игра" запускается секундомер. Взял код by ostgals
function start_timer()  {
      End=0; secs = 0;
      document.getElementById('timer').innerHTML = secs + ' сек.';
      if (timer) clearInterval(timer); 
        var timer = setInterval( function () {
               if (End==1) return; secs++; 
              document.getElementById('timer').innerHTML = secs + ' сек.'; },  1000
                                       );  }

После успешного завершения игры таймер останавливается с помощью
End=1;

Все работает. Проблема в том, что если юзер несколько раз нажмет кнопку "Новая игра" (чтобы может выбрать начальную комбинацию поприятнее), секундомер начинает скакать как бешенный. Видимо, переменная secs получает пинки от нескольких функций. Как решить эту проблему?

ksa 09.12.2011 09:44

Цитата:

Сообщение от alexan0308
Как решить эту проблему?

Перед запуском таки делать clearInterval().

Цитата:

Сообщение от alexan0308
таймер останавливается с помощью
End=1;

Убрать. И таки опять использовать clearInterval()...

alexan0308 09.12.2011 14:47

Переделал не помогает. Скачет как бешенный
function start_timer()
     {
	 if (timer) clearInterval(timer);  
	 secs = 0; 
	 document.getElementById('timer').innerHTML = 'Время: '+ secs + ' сек.';  
	 var timer = setInterval( 
	    function () {
	     secs++;
   		 document.getElementById('timer').innerHTML = 'Время: '+ secs + ' сек.'; 
		 }, 
		 1000 
		 );
		 }

ksa 09.12.2011 20:03

alexan0308, сделай полный пример. Так ничего не понятно всё равно...

рони 09.12.2011 22:06

alexan0308,
Сделайте var timer глобальным и будет вам счастье ...
<script type="text/javascript">
var timer;
function start_timer()
     {
	 if (timer) clearInterval(timer);
	 secs = 0;
	 document.getElementById('timer').innerHTML = 'Время: '+ secs + ' сек.';
	 timer = setInterval(
	    function () {
	     secs++;
   		 document.getElementById('timer').innerHTML = 'Время: '+ secs + ' сек.';
		 },
		 1000
		 );
		 }
</script>
<input type="button" name="" value="test"  onclick="start_timer()"/>
<div id="timer"></div>

alexan0308 09.12.2011 22:41

Цитата:

Сообщение от рони (Сообщение 141666)
alexan0308,
Сделайте var timer глобальным и будет вам счастье ...

Все ясно, спасибо! остановил также таймер
function stop_timer()
     {		 
	   if (timer) clearInterval(timer);	 
		 }

<input type='button' onClick='stop_timer()' value='Завершить игру'>


Часовой пояс GMT +3, время: 04:45.