Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 12.05.2012, 10:50
Интересующийся
Отправить личное сообщение для Mazai Посмотреть профиль Найти все сообщения от Mazai
 
Регистрация: 29.03.2011
Сообщений: 23

Как очистить очередь анимаций
Есть зацикленная функция, которая заставляет мерцать параллельно 3 div блока
var a = 0;
var tm = null;
function pr() {
if  ( a == 0 || a == 1  ) {
$("#blocks div").eq(0).fadeTo(2000,a);
$("#blocks div").eq(1).fadeTo(3000,a);
$("#blocks div").eq(2).fadeTo(4000,a);

a++;
if ( a == 2) {  a = 0; }
tm = setTimeout(pr(),2000);

}

if ( a > 2)
{
$("#blocks div").eq(0).fadeTo(2000,1);
$("#blocks div").eq(1).fadeTo(3000,1);
$("#blocks div").eq(2).fadeTo(4000,1);

}
}


и кнопочка стоп
$("#stop").click(function() {    a = 4;  clearTimeout(tm); tm = null;   } );

по нажатию на которую мерцание всех блоков должно остановиться.

Проблема в том, что по нажатию останавливается мерцание первого блока, а очередь анимаций на остальные продолжает работать.

Как можно решить эту проблему, подскажите пожалуйста товарищи форумчане.
Ответить с цитированием
  #2 (permalink)  
Старый 12.05.2012, 11:52
Профессор
Отправить личное сообщение для zebra Посмотреть профиль Найти все сообщения от zebra
 
Регистрация: 14.09.2011
Сообщений: 523

$("#blocks div").stop(true, true)
Ответить с цитированием
  #3 (permalink)  
Старый 12.05.2012, 12:15
Интересующийся
Отправить личное сообщение для Mazai Посмотреть профиль Найти все сообщения от Mazai
 
Регистрация: 29.03.2011
Сообщений: 23

Пробовал, не помогает.
Ответить с цитированием
  #4 (permalink)  
Старый 12.05.2012, 14:31
Аспирант
Отправить личное сообщение для atlantis Посмотреть профиль Найти все сообщения от atlantis
 
Регистрация: 18.03.2012
Сообщений: 95

Попробуй так:
var a = 0;
var tm = new Array();
function pr() {
if  ( a == 0 || a == 1  ) {
$("#blocks div").eq(0).fadeTo(2000,a);
$("#blocks div").eq(1).fadeTo(3000,a);
$("#blocks div").eq(2).fadeTo(4000,a);

a++;
if ( a == 2) {  a = 0; }
tm[a] = setTimeout(pr(),2000);

}

if ( a > 2)
{
$("#blocks div").eq(0).fadeTo(2000,1);
$("#blocks div").eq(1).fadeTo(3000,1);
$("#blocks div").eq(2).fadeTo(4000,1);

}
}
$("#stop").click(function() {
a = 4;  
for ( var i = 0; i <= 4; i++) if ( tm[i] ) clearTimeout(tm[i]); 
tm = new Array();   
} );

Только измени значения в "for ( var i = 0; i <= 4; i++) " на то, сколько у тебя значений "а".

Последний раз редактировалось atlantis, 12.05.2012 в 14:33.
Ответить с цитированием
  #5 (permalink)  
Старый 14.05.2012, 11:02
Интересующийся
Отправить личное сообщение для Mazai Посмотреть профиль Найти все сообщения от Mazai
 
Регистрация: 29.03.2011
Сообщений: 23

Решил "быдло" способом, раскидал все по разным функциям.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Решение проблемы кодировок для AJAX и PHP без iconv (cp1251 в AJAX) Serge Ageyev AJAX и COMET 10 24.04.2013 20:48
Как сделать как в JQ? faforty Общие вопросы Javascript 8 14.11.2011 01:35
JS классы - как объединить функции в класс olga153b Events/DOM/Window 3 01.11.2011 14:13
Как узнать, присутствует ли в окне полоса прокрутки или нет? возжаждавший Элементы интерфейса 6 12.03.2010 23:00
Как сделать электронный каталог продукции? natarius Серверные языки и технологии 6 24.05.2009 20:56