Как очищать все возможные интервалы созданные 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 Может ты ждешь его, а оно не наступает. :-? В моем примере это можно проверить раскоментировав всего одну строку с алертом. ;) |
Повторно требуется помощь по этому скрипту. Периодически все-таки наслаиваются интервалы друг на друга и закладка начинает моргать со страшной скоростью. Но не это главное - никак не получается остановить моргание. Я и на боди кликаю и везде. Уже несколько триггеров сделал для отключения - только если сначала перейти на закладку а потом щелкнуть боди - тогда моргание прекращается. Хотелось бы, чтобы в любое место ткнул и отрубил. Ну и накопление интервалов тоже остается загадкой.
|
Цитата:
Просто setInterval() в твоем коде запускается большее количество раз, нежели clearInterval(). Либо количество может совпадать... А вот последовательность нет +1 -1 +2 -2 А типа такого +1 +2 -2 -2 Вот первый интервал не убился... Как убить гарантировано все интервалы, тебе показал камрад Aetae выше... https://javascript.ru/forum/misc/782...tml#post511578 |
| Часовой пояс GMT +3, время: 19:19. |