Как очистить очередь анимаций
Есть зацикленная функция, которая заставляет мерцать параллельно 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; } ); по нажатию на которую мерцание всех блоков должно остановиться. Проблема в том, что по нажатию останавливается мерцание первого блока, а очередь анимаций на остальные продолжает работать. Как можно решить эту проблему, подскажите пожалуйста товарищи форумчане. |
$("#blocks div").stop(true, true)
|
Пробовал, не помогает.
|
Попробуй так:
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++) " на то, сколько у тебя значений "а". |
Решил "быдло" способом, раскидал все по разным функциям.
|
Часовой пояс GMT +3, время: 08:44. |