Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Как очистить очередь анимаций (https://javascript.ru/forum/jquery/28238-kak-ochistit-ochered-animacijj.html)

Mazai 12.05.2012 10:50

Как очистить очередь анимаций
 
Есть зацикленная функция, которая заставляет мерцать параллельно 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;   } );

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

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

Как можно решить эту проблему, подскажите пожалуйста товарищи форумчане.

zebra 12.05.2012 11:52

$("#blocks div").stop(true, true)

Mazai 12.05.2012 12:15

Пробовал, не помогает.

atlantis 12.05.2012 14:31

Попробуй так:
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++) " на то, сколько у тебя значений "а".

Mazai 14.05.2012 11:02

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


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