Javascript.RU

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

не могу остановить setinterval
Люди добрые подскажите) Имеется функция. Вызывается автоматический таймер, который меняет картинки через определенный промежуток времени.
function timer(flag){
    var intervalId = setInterval (function(){...}
    if (flag == 'false') {
                clearInterval(intervalId);
             }
}

Вызываю эту функцию с параметром timer('false'); Работает и останавливает.

Хочу при нажатии на картинку вызвать эту функцию и остановить таймер и затем заново запустить, от того момента с которого я нажал на картинку. Пишу

$("#cimg2").click(function(event){
    timer('false');//останавливает таймер
    ...
    код//выполняет нужный мне код
    timer();//опять запускается таймер
}

Не работает и не останавливает. Убирал timer(); в $("#cimg2").click(function(event), чтобы проверить остановит ли он таймер, не остановил. Не могу понять почему в данном случае он не останавливает таймер, и как сделать чтобы заработал.
Ответить с цитированием
  #2 (permalink)  
Старый 08.09.2014, 22:29
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 12,327

harley, сделай для начала полный тестовый пример... Кому нужны твои огрызки.
Ответить с цитированием
  #3 (permalink)  
Старый 09.09.2014, 06:55
Профессор
Отправить личное сообщение для krasovsky Посмотреть профиль Найти все сообщения от krasovsky
 
Регистрация: 21.12.2012
Сообщений: 869

Во первых в своей функции ты пишешь:
var intervalId = setInterval (function(){...}// что означает локальную переменную, которая доступна внутри функции.

Далее ты вызываешь снова эту функцию передаешь флаг, и о чудо почему то не работает. А потому что
clearInterval(intervalId);//этот intervalId это уже другой, а не тот что ты запустил при прошлом вызове функции.


другими словами состояние setInterval хранить в глобальной переменной, например window['myInterval'] = setInterval...... и его уже останавливать и переопределять. Кстати советую в качестве флага передавать не строку а просто true Или false и проверять соответственно не на строку.
Ответить с цитированием
  #4 (permalink)  
Старый 09.09.2014, 12:36
Новичок на форуме
Отправить личное сообщение для harley Посмотреть профиль Найти все сообщения от harley
 
Регистрация: 08.09.2014
Сообщений: 3

Спасибо за помощь, решил так ситуацию:
var intervalId;
function timer(){
    intervalId = setInterval (function(){...} 
}
...
timer();
...
$("#cimg2").click(function(event){
    clearInterval(intervalId);
    ...
    код//выполняет нужный мне код
    timer();//опять запускается таймер
}
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не могу выучить javascript. usertest Оффтопик 17 20.03.2016 07:33
Остановить таймер setInterval Орёл Общие вопросы Javascript 8 11.01.2015 21:07
Оптимизация JS WeMeSder Общие вопросы Javascript 0 13.06.2014 22:51
setInterval и глобальные переменные Почемучкин Events/DOM/Window 11 11.08.2012 13:44
setTimeout setInterval и др. mycoding Общие вопросы Javascript 6 28.10.2010 16:26