Javascript.RU

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

Не работает clearInterval
Делаю таймер, который издает звуоковой сигнал каждые n секунд.
Функция okras отрисовывает полоску в зависимости от времени, которое проходит, до звукового сигнала.
Вызываю ее один раз перед timerPing = setInterval для отрисовки до первого сигнала, остальные разы вызываю уже внутри setInterval. По кнопке вызываю функцию остановки таймера timerStop(). Если запустить таймер, потом нажать на кнопку перед первым звуковым сигналом, то таймер выключится, и отрисовка полосы так же остановится. Если нажать на кнопку, после первого сигнала, то есть, когда функция отрисовки будет выполняться внутри setInterval, то выключится только таймер, а полоса все равно продолжает рисоваться, почему так?

...

function timerfunc(){

	...
	
	function okras(){
		timerLine = setInterval(function() 
		{
			var timePassed = Date.now() - start;
			if (timePassed >= finalTime*1000) 
			{
				clearInterval(timerLine);
			}
			draw(timePassed);
		}, 20);
	}

	...
	
	okras();
	timerPing = setInterval(function() 
	{  
		start = Date.now();
	okras();
		ping.play();  
	}, finalTime*1000);
	
}

function timerStop(){
	clearInterval(timerPing);
	clearInterval(timerLine);
	document.getElementById('buttonStop').innerHTML='<a id=timerButton onClick=timerfunc()>ЗАПУСК</a>';
}
Ответить с цитированием
  #2 (permalink)  
Старый 20.02.2017, 08:16
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,123

Сообщение от Hur_ley
почему так?
Ты все пишешь про какой-то один setInterval()... А в твоих огрызках их уже два...
Ответить с цитированием
  #3 (permalink)  
Старый 20.02.2017, 12:28
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

Hur_ley,
Сообщение от Hur_ley
Если нажать на кнопку, после первого сигнала, то есть, когда функция отрисовки будет выполняться внутри setInterval, то выключится только таймер, а полоса все равно продолжает рисоваться, почему так?
Потому что clearInterval останавливает соответствующий таймер, а запущенную функцию draw(timePassed) не останавливает.
В этом примере подождите немного, чтобы начали появляться цифры, и нажмите Стоп
<button id="stop">Стоп</button>
<div id="cont"></div>

<script>
var i = 0;
var interval = setInterval(function() {
       startCount(++i);
},2000);
function startCount(indx) {
   var divCount = document.createElement('div');
   divCount.id = "count" + indx.toString();
   cont.appendChild(divCount);
   var j = 0;
   var start = setInterval(function() {divCount.innerText = ++j},1000);
}
document.getElementById("stop").onclick = function() {
 
  clearInterval(interval);
}
</script>

Последний раз редактировалось Dilettante_Pro, 20.02.2017 в 12:32.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
JS: работает на сервере, не работает из папки -majestic- Общие вопросы Javascript 2 02.08.2012 14:41
Не работает push! Динамическая вставка TSEH25 ExtJS 5 03.07.2012 13:00
jQyery функция странно работает! Midel Общие вопросы Javascript 4 08.04.2012 13:40
помогите найти ошибку (работает в IE но не работает в Firefox) Len4ik Javascript под браузер 2 11.05.2010 15:41
Safari + ajax некорректно работает, а в других работает demi AJAX и COMET 35 15.07.2009 14:11