Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   помогите разобраться с .animation (https://javascript.ru/forum/jquery/12164-pomogite-razobratsya-s-animation.html)

InviS 04.10.2010 15:05

помогите разобраться с .animation
 
ребят, реализовал галерейку на jquery. Фотки сменяются по нажатию стрелок на клавиатуре либо по нажатию кнопок мышкой. Смена выполняется при помощи .animate с заданием свойства margin-left. Но столкнулся с проблемой: если кто-то клацнет подряд 2 раза, то весь скрипт портится... т.к. фотка листнулась наполовину а мы ее еще раз. и получится что-то типа:


Как это исправить? Чтоб по нажатию и вызову события еще раз мы ждали, пока закончится событие, которое уже выполняется?
Ссылка, чтоб протестировать этот баг: вот

Skipp 04.10.2010 15:13

удаляйте событие на кнопке на время animate.
или используй .one(... и при калбаке animate опять определяй событие через .one(...

InviS 04.10.2010 15:17

А возможности поставить в очередь на выполнение - такого не существует? И по .one вопрос тоже тогда. Я вызываю у себя функции так:
$(..).live("click",function(){}); Будет ли работать .one с динамически создающимися элементами DOM?

Skipp 04.10.2010 15:28

я про события на стрелках

InviS 04.10.2010 15:44

на стрелках я лишь еще раз вызываю функции, которые у меня на кнопках:
$(document).keyup(function(e){
		if (e.keyCode==27) $("#for-galery").empty();
		if (e.keyCode==39) $(".next").trigger("click");
		if (e.keyCode==37) $(".prev").trigger("click");
	});

InviS 04.10.2010 16:00

сделал все при помощи глобальной переменной flag:
if (flag==0){
  flag = 1;
  $("#element").animate({},"normal",function(){
    flag = 0; 
  });
}

Все работает... Есть ли более элегантное решение?

Skipp 04.10.2010 16:05

InviS,
Ну для этого я думаю придётся многое переделать:)
Хотя может это только я так думаю, код не смотрел.

alexwebck 05.10.2010 19:44

if ($("#element:animated").size()) return; - пока идет анимация, ничего не делать

InviS 05.10.2010 23:06

пасиб, попробую


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