Как очищать все возможные интервалы созданные setInterval
Сделал моргающую закладку для привлечения внимания к новым сообщениям. Но не могу решить одну проблему. Таймер поступления сообщений установлен на 5 минут и стОит пропустить хоть одно уведомление о поступлении сообщений, как сразу перестает действовать clearInterval. Мне думается потому, что возникает несколько интервалов, а уничтожается только последний. Отсюда вопрос: как гарантированно убить все интервалы? Пробовал и перебором в цикле и по-всякому. Подскажите, если не трудно. Спасибо!
Пока убиваю интервал так window.onfocus = function() { clearInterval(interval); document.title = oldTitle; }; |
maiskiykot,
что мешает очищать интервал перед назначением нового? |
Цитата:
|
maiskiykot,
переменную interval сделайте глобальной |
Если задаю переменную window.interval - вообще перестает работать.
|
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; }; |
... подожду телепатов.
|
Так я уже все выложил - всю функцию
|
maiskiykot,
не могу ничего посоветовать, возможно вы что-то не договариваите. |
Да все вроде на виду. Я даже находил где-то решение, но случайно стер все свои файлы при переустановке винды. Просто в JS не силен и бывает, что сам не могу допереть.
|
Убрать все - так:
for(var i = setInterval(''); i >= 0; i--) clearInterval(i); Но это заметание мусора под ковёр. Если у вас что-то не работает или где-то назначаются лишние интервалы - надо открывать отладчик и дебажить. |
Цитата:
<!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. |