Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   не срабатывает clearInterval (https://javascript.ru/forum/dom-window/63726-ne-srabatyvaet-clearinterval.html)

refrom 25.06.2016 18:03

не срабатывает clearInterval
 
Добрый день!

Написал функцию, которая анимирует картинку типа прогрессбар.
function fancy_load(n) {
	$('#loaderImage').css({display: "block"});
	var i=0;
	function timer() {
	    $('#loaderImage').css({backgroundPosition: "-" + 128*i + "px 0px"});
	    i++; 	
	}
	var intervalID = setInterval(timer, 30); 

	if (n == 'f'){
	    intervalID = clearInterval(intervalID);
	} 
}


Обращаюсь к ней 2 раза. Первый при нажатии на кнопку, второй после загрузки необходимой информацией уже с переменной, при наличии которой должна сработать clearInterval
$(".add_goods_button, .edit_good").click(function(){
		fancy_load();
		$.post("functions_orders.php", {
			action:"add_goods" 
		}, 
		function(data) {

			$("#div_goods_right").html(data);
			$(".lable_art_off").click(function(){
				var art = $(this).attr("id");
				newGoods(art);
		});
			fancy_load("f");
		});
		
	});


clearInterval не срабатывает. Потом посмотрел, что intervalID меняется при повторном обращении. дописал "костыль" что бы он не менялся (присвоил ему постоянный номер). Все равно не срабатывает.

Подскажите как правильно поправить код, что бы при повторном обращении к функции с переменной n = 'f' срабатывала clearInterval.

рони 25.06.2016 18:17

refrom,

intervalID обьявите вне функции

рони 25.06.2016 18:21

refrom,
var intervalID;
function fancy_load(n) {
	$('#loaderImage').css({display: "block"});
	var i=0;
	function timer() {
	    $('#loaderImage').css({backgroundPosition: "-" + 128*i + "px 0px"});
	    i++;
	}
	if (n == 'f'){
	    clearInterval(intervalID);
	}
    else intervalID = setInterval(timer, 30);
}

рони 25.06.2016 18:25

refrom,
а лучше так
var intervalID;
function fancy_load(n) {
        clearInterval(intervalID);
	$('#loaderImage').css({display: "block"});
	var i=0;
	function timer() {
	    $('#loaderImage').css({backgroundPosition: "-" + 128*i + "px 0px"});
	    i++;
	}
    	if (n != 'f'){
    intervalID = setInterval(timer, 30);
	}
}

refrom 25.06.2016 18:40

Спасибо большое. Действительно сработало


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