Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как очищать все возможные интервалы созданные setInterval (https://javascript.ru/forum/misc/78218-kak-ochishhat-vse-vozmozhnye-intervaly-sozdannye-setinterval.html)

maiskiykot 11.08.2019 12:10

Как очищать все возможные интервалы созданные setInterval
 
Сделал моргающую закладку для привлечения внимания к новым сообщениям. Но не могу решить одну проблему. Таймер поступления сообщений установлен на 5 минут и стОит пропустить хоть одно уведомление о поступлении сообщений, как сразу перестает действовать clearInterval. Мне думается потому, что возникает несколько интервалов, а уничтожается только последний. Отсюда вопрос: как гарантированно убить все интервалы? Пробовал и перебором в цикле и по-всякому. Подскажите, если не трудно. Спасибо!

Пока убиваю интервал так
window.onfocus = function() { 
                   clearInterval(interval);
                   document.title = oldTitle;
                };

рони 11.08.2019 13:54

maiskiykot,
что мешает очищать интервал перед назначением нового?

maiskiykot 11.08.2019 16:24

Цитата:

Сообщение от рони (Сообщение 511497)
maiskiykot,
что мешает очищать интервал перед назначением нового?

Мешает то, что не работает. Я уже и так и эдак пробовал - не очищаются все интервалы.

рони 11.08.2019 16:51

maiskiykot,
переменную interval сделайте глобальной

maiskiykot 12.08.2019 15:10

Если задаю переменную window.interval - вообще перестает работать.

ksa 12.08.2019 15:39

maiskiykot, ты бы хоть пример какой тестовый сделал...

maiskiykot 12.08.2019 16:07

Цитата:

Сообщение от ksa (Сообщение 511556)
maiskiykot, ты бы хоть пример какой тестовый сделал...

Вот весь код

var isOldTitle = true; 
                      var oldTitle = "Old"; 
                      var newTitle = "New"; 
                      var interval = null;
                      function changeTitle() { 
                       
                      document.title = isOldTitle ? oldTitle : newTitle; 
                      isOldTitle = !isOldTitle;                        
                      }
                    
                      interval = setInterval(changeTitle, 1000); 
                                    
                window.onfocus = function() { 
                   for (var i = 1;i < 99999;i++)
                   {
                    clearInterval(i);
                   }
                   document.title = oldTitle;
                };

рони 12.08.2019 16:13

... подожду телепатов.

maiskiykot 12.08.2019 18:07

Так я уже все выложил - всю функцию

рони 12.08.2019 18:20

maiskiykot,
не могу ничего посоветовать, возможно вы что-то не договариваите.

maiskiykot 12.08.2019 22:45

Да все вроде на виду. Я даже находил где-то решение, но случайно стер все свои файлы при переустановке винды. Просто в JS не силен и бывает, что сам не могу допереть.

Aetae 13.08.2019 01:17

Убрать все - так:
for(var i = setInterval(''); i >= 0; i--)
  clearInterval(i);

Но это заметание мусора под ковёр. Если у вас что-то не работает или где-то назначаются лишние интервалы - надо открывать отладчик и дебажить.

ksa 13.08.2019 08:20

Цитата:

Сообщение от maiskiykot
Вот весь код

У меня в Опере все работает.
<!DOCTYPE html>
<html>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=windows-1251' />
<!--
<script src='https://code.jquery.com/jquery-latest.js'></script>
<script src="https://code.angularjs.org/1.3.9/angular.min.js"></script>
<script src="https://code.angularjs.org/1.3.9/angular-route.js"></script>
-->
<style type='text/css'>
</style>
<script type='text/javascript'>
var isOldTitle = true; 
var oldTitle = "Old"; 
var newTitle = "New"; 
var interval = null;
interval = setInterval(changeTitle, 1000); 
window.onfocus = function() { 
	//alert('Ok');
	clearInterval(interval);
	document.title = oldTitle;
};
function changeTitle() { 
	document.title = isOldTitle ? oldTitle : newTitle; 
	isOldTitle = !isOldTitle;                        
};
</script>
</head>
<body>
</body>
</html>

Весь вопрос только в window.onfocus... Это событие кагбэ капризное. :D
https://learn.javascript.ru/window-focus
Может ты ждешь его, а оно не наступает. :-?
В моем примере это можно проверить раскоментировав всего одну строку с алертом. ;)


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