Форум программистов
 
Регистрация на форуме тут, о проблемах пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль

Купить рекламу на форуме 15-35 тыс рублей в месяц

Вернуться   Форум программистов > Web программирование > JavaScript, Ajax
Регистрация

Восстановить пароль
Повторная активизация e-mail


Оплата за обучение в Kata Academy только после твоего трудоустройства в IT, начни карьеру Middle Java-разработчика


Ответ
 
Опции темы Поиск в этой теме
Старый 16.12.2015, 15:42   #1
Illusiony
Форумчанин
 
Регистрация: 17.02.2014
Сообщений: 881
По умолчанию Ситуация одновременно запущенными setinterval

Ситуация:
Имеется 2 функции.
В одной запускается setinterval.
Во второй останавливаем setinterval.
Ситуация такая, что если нажать несколько раз Пуск запуститься несколько копий setinterval. И при этом кнопкой Стоп не останавливаются. Останавливается только если был запущен 1 раз Пуск и потом остановлен.
Вот полный код примера.
Код:
<html>
<head>
  <meta http-equiv='Content-Type' content='text/html; charset=UTF-8'>
  <script type='text/javascript' src='jquery-2.1.4.js'></script>
  <script type='text/javascript' 
  <title></title>
</head>
<font id ='text_timer' STYLE='font-size:52pt'  face='Arial' > 
 Timer</font>
 <input type='button' id ='button1' value='Старт' />
 <input type='button' id ='button2' value='Стоп' />
</body>
</html>
<script>
time_p=1000;
function timer_start()
	{
	timer1=setInterval(function() { 
		time_p=time_p-1;
		$('#text_timer').text(time_p);										
				}, 1000);
	}
function timer_stop()
	{
	clearTimeout(timer1);	
	}
	
$(document).ready(function() {
	$('#button1').click(function(){
		timer_start();
		});
	$('#button2').click(function(){
		timer_stop();	
		});
	});

;
</script>
";

Последний раз редактировалось Illusiony; 16.12.2015 в 15:45.
Illusiony вне форума Ответить с цитированием
Старый 16.12.2015, 15:51   #2
come-on
Участник клуба
 
Регистрация: 21.10.2015
Сообщений: 1,413
По умолчанию

Ну правильно а вы что хотели?
блокируйте кнопку или проверяйте запущен или нет, если надо только 1 раз, иначе нужен массив для timer1.
come-on вне форума Ответить с цитированием
Старый 16.12.2015, 15:59   #3
Illusiony
Форумчанин
 
Регистрация: 17.02.2014
Сообщений: 881
По умолчанию

Цитата:
Сообщение от come-on Посмотреть сообщение
Ну правильно а вы что хотели?
блокируйте кнопку или проверяйте запущен или нет, если надо только 1 раз, иначе нужен массив для timer1.
То есть на стадии, когда уже больше 1го запущено остановить уже никак?
Illusiony вне форума Ответить с цитированием
Старый 16.12.2015, 16:06   #4
come-on
Участник клуба
 
Регистрация: 21.10.2015
Сообщений: 1,413
По умолчанию

вроде просто сказал, что еще не понятно?
ну прочитайте про setInterval и clearInterval может так поймете
come-on вне форума Ответить с цитированием
Старый 17.12.2015, 08:31   #5
Kazik
Форумчанин
 
Регистрация: 27.05.2009
Сообщений: 192
По умолчанию

Код:
time_p=1000;
tTimer = false;
function tick(){
		tTimer = true;
		time_p -= 1;
		$('#text_timer').text(time_p);		
}

function timer_start(){
    if (!tTimer){
		timer1 = setInterval(tick, 1000);
	}
}
	
function timer_stop(){
	clearTimeout(timer1);
        tTimer = false;	
}
	
$(document).ready(function() {
	$('#button1').click(function(){
		timer_start();
	});

	$('#button2').click(function(){
		timer_stop();	
	});
});

Последний раз редактировалось Kazik; 17.12.2015 в 08:56.
Kazik вне форума Ответить с цитированием
Старый 09.01.2022, 03:15   #6
Денис14101986
Новичок
Джуниор
 
Регистрация: 09.01.2022
Сообщений: 1
По умолчанию

мне помогло вот такое решение:
создал пустой массив
при каждом запуске таймера пушил в него новый id (c каждым запуском он увеличивается на единицу)
для остановки всех таймеров перебирал этот массив и для каждого айди запускал clearInterval

вот код:
let a = 0
let timer
let arr = []

start.addEventListener('click', function () {
timer = setInterval(function () {
if(arr.indexOf(timer)==-1){
arr.push(timer)
console.log(arr)
}

div.style.left = a + 'px'
a++
}, 20)
})

stop.addEventListener('click', function () {
console.log(arr)
arr.forEach(clearInterval)
console.log(arr)


})
Денис14101986 вне форума Ответить с цитированием
Ответ
Опции темы Поиск в этой теме
Поиск в этой теме:

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
setInterval и clearInterval Kazik JavaScript, Ajax 1 26.09.2015 12:58
JS. Приостановить setInterval Bayern_M JavaScript, Ajax 2 03.09.2015 12:28
setInterval не работает bill JavaScript, Ajax 1 10.12.2012 10:40
статья - Общение между запущенными копиями своих программ Pblog Обсуждение статей 0 27.02.2011 22:44
SetInterval и SetTimeOut Syltan JavaScript, Ajax 1 10.05.2010 21:42

Реклама для незарегистрированных, регистрация на форуме