Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   нужна помощь по таймеру или что то в этом роде (https://javascript.ru/forum/jquery/24528-nuzhna-pomoshh-po-tajjmeru-ili-chto-v-ehtom-rode.html)

Arkinsstoun 04.01.2012 17:16

нужна помощь по таймеру или что то в этом роде
 
Народ вообщем такое дело...

у меня есть 5 одинаковых ссылок с одинаковым классом при клике на одну из них произходит определённое анимационное действие...но если кликать быстро на все сразу то всё начинает вылазить за рамки дёрганье и т.д вообщем некрасивый бардак...

мне нужно что бы при клике на одну ссылку пока анимация не закончится другие не работали как это можно реализовать???

Octane 04.01.2012 17:24

Очевидно, не запускать новую анимацию, пока не закончится текущая.

http://api.jquery.com/animate/
Цитата:

.animate( properties [, duration] [, easing] [, complete] )

complete: A function to call once the animation is complete.


Arkinsstoun 04.01.2012 17:34

Цитата:

Сообщение от Octane (Сообщение 148026)
Очевидно, не запускать новую анимацию, пока не закончится текущая.

http://api.jquery.com/animate/

это немного не то! это функция которая запускается после анимации...как я её использую в моём случае? может я не понял чего то

и вот мой код поправте всё что не коректо! оно то всё работает но я не профи и знаю что полюбому костыли есть!

$open_slide.live("click",  // ловим клик на .open_slide через live()
function(e){

var this_os = $(this); // загоняем this в переменную
var ind_ws = this_os.closest($wrapper_slide).index(); //сохраняем в переменную index текущего wrapper_slide
if(this_os.data("active") != true){ //проверка активности
    
	e.preventDefault();	//запрет перехода ссылки
	
	this_os.data("active",true); // добовляем состояние текущему .open_slide
	
	console.time('create list'); 
	$wrapper_slide.filter("[rel=act]").removeAttr("rel").animate({"width":"30"});	// анимируем стартовую ширину .wrapper_slide с атрибутом, удаляем атрибут
	$slide.filter("[rel=act]").removeAttr("rel").animate({"opacity":"hide","width":""}); // анимируем стартовую ширину .slide  с атрибутом, удаляем атрибут
	console.timeEnd('create list');
	
	this_os.next($slide).attr("rel","act").delay(500).animate({"width":"600","opacity":"show"},600);// текущему .slide даём анимацию и атрибут
	this_os.closest($wrapper_slide).attr("rel","act").delay(500).animate({"width":"625"},300); // текущему .wrapper_slide даём анимацию и атрибут
		
    
	$open_slide.filter(":not(:eq("+ind_ws+"))").data("active",false); // удаляем состояние всех .open_slide	кроме текущего
	
	
			}<!--close if-->
		}<!--close function click-->
	);<!--close click-->

bret 05.01.2012 14:55

1. Добавить переменную disableAnimation
2. Перед выполнением анимации проверять первую, если disableAnimation==true, то новую анимацию не начинать
3. При проигрывании анимации выставлять переменную в true, по окончании анимации - сбрасывать в false


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