mrKorg
@mrKorg
web developer

Как остановить setInterval для всех each кроме одного?

Как остановить уже выполняющиеся setInterval кроме активного?
Скрипт выполняет анимацию чата, всплывание сообщений, при переключении таба анимация начинается заново, нужно остановить уже начатые.

// Tabs
    $(".tabgroup > div, .tabgroup .massage").hide();
    $(".tabs a").click(function(e){
        e.preventDefault();
        var $this = $(this),
            tabgroup = '#'+$this.parents('.tabs').data('tabgroup'),
            others = $this.closest('li').siblings().children('a'),
            target = $this.attr('href');
        others.removeClass('active');
        $this.addClass('active');
        $(tabgroup).children('div').hide().removeClass("active");
        $(tabgroup).find(".massage").hide();
        $(target).show().addClass("active");
        $(target).each(function(){
            // Show massage
            var tik,
                i = 0,
                massage = $(target).find(".massage"),
                massageLength = massage.length;
            tik = setInterval(function(){
                if (i < massageLength) {
                    $(massage[i]).fadeIn(500);
                    i++;
                    $(".massageList, .custom-scroll_inner").animate({
                        scrollTop: 9999
                    }, 1000);
                } else {
                    clearInterval(tik);
                }
            }, 2000);
        });

    });
    // Auto show first
    $(".tabs li:first-of-type a").click();
  • Вопрос задан
  • 186 просмотров
Пригласить эксперта
Ответы на вопрос 1
GogElf
@GogElf
Хокаге
// Tabs
	var tik = [];
	$(".tabgroup > div, .tabgroup .massage").hide();
	$(".tabs a").click(function(e){
		e.preventDefault();
		var $this = $(this),
				tabgroup = '#'+$this.parents('.tabs').data('tabgroup'),
				others = $this.closest('li').siblings().children('a'),
				target = $this.attr('href');
		others.removeClass('active');
		$this.addClass('active');
		$(tabgroup).children('div').hide().removeClass("active");
		$(tabgroup).find(".massage").hide();
		$(target).show().addClass("active");
		if(tik.length){
			for(var i = 0; i < tik.length; i++){
				if(tik[i]) clearInterval(tik[i]);
			}
			tik = [];
		}
		$(target).each(function(index){
			// Show massage
			var i = 0,
				massage = $(target).find(".massage"),
				massageLength = massage.length;
			tik[index] = setInterval(function(){
				if (i < massageLength) {
					$(massage[i]).fadeIn(500);
					i++;
					$(".massageList, .custom-scroll_inner").animate({
						scrollTop: 9999
					}, 1000);
				} else {
					clearInterval(tik[index]);
				}
			}, 2000);
		});

	});
	// Auto show first
	$(".tabs li:first-of-type a").click();
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы