Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   не могу остановить setinterval (https://javascript.ru/forum/jquery/50035-ne-mogu-ostanovit-setinterval.html)

harley 08.09.2014 21:20

не могу остановить 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), чтобы проверить остановит ли он таймер, не остановил. Не могу понять почему в данном случае он не останавливает таймер, и как сделать чтобы заработал.

ksa 08.09.2014 22:29

harley, сделай для начала полный тестовый пример... Кому нужны твои огрызки.

krasovsky 09.09.2014 06:55

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

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


другими словами состояние setInterval хранить в глобальной переменной, например window['myInterval'] = setInterval...... и его уже останавливать и переопределять. Кстати советую в качестве флага передавать не строку а просто true Или false и проверять соответственно не на строку.

harley 09.09.2014 12:36

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


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