Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 17.04.2011, 22:49
Кандидат Javascript-наук
Отправить личное сообщение для Nightmare Посмотреть профиль Найти все сообщения от Nightmare
 
Регистрация: 16.04.2010
Сообщений: 133

вопрос по animate
как не проигрывать снова анимацию пока не закончилась предыдущая?
Ответить с цитированием
  #2 (permalink)  
Старый 17.04.2011, 22:54
Аватар для walik
Профессор
Отправить личное сообщение для walik Посмотреть профиль Найти все сообщения от walik
 
Регистрация: 09.11.2009
Сообщений: 1,101

$('#bla1').animate({opacity: 0.25}, 'slow', function() {
    $('#bla2').animate({opacity: 0.25}, 'slow');
});
__________________
"Всегда пишите код так, будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете."
Мой сертификат :-D клацай
Ответить с цитированием
  #3 (permalink)  
Старый 17.04.2011, 23:00
Кандидат Javascript-наук
Отправить личное сообщение для Nightmare Посмотреть профиль Найти все сообщения от Nightmare
 
Регистрация: 16.04.2010
Сообщений: 133

разьясню:
$('.s').click(function() {
   $('.sDIV').animate('margin-left':'-=20px', 500)
})


если много раз щелкаешь - еще некоторое колл-во секунд двигается влево... как предотвратить?
Ответить с цитированием
  #4 (permalink)  
Старый 17.04.2011, 23:03
Аватар для B@rmaley.e><e
⊞ Развернуть
Отправить личное сообщение для B@rmaley.e><e Посмотреть профиль Найти все сообщения от B@rmaley.e><e
 
Регистрация: 11.01.2010
Сообщений: 1,810

$('.s').click(function() {
   $('.sDIV').not(':animated').animate('margin-left':'-=20px', 500)
})
Ответить с цитированием
  #5 (permalink)  
Старый 18.04.2011, 00:18
Аспирант
Отправить личное сообщение для kiff86 Посмотреть профиль Найти все сообщения от kiff86
 
Регистрация: 26.03.2011
Сообщений: 52

Похожий вопрос, поэтому не создаю тему..
Есть меню.. при нажатии на любой пункт меню идет подгрузка заданного контента методом load.. перед этим идет анимация по увеличению высоты блока в который загружается контент.
Но, если нажать на один пункт, и, не дождавшись анимации и показа загруженного изображения, нажать на другой элемент меню, то происходит неразбериха в анимации... Вот бы была функция, которая блокирует определенный яваскрипт, до полного окончания действия...
Ответить с цитированием
  #6 (permalink)  
Старый 18.04.2011, 00:24
Аспирант
Отправить личное сообщение для kiff86 Посмотреть профиль Найти все сообщения от kiff86
 
Регистрация: 26.03.2011
Сообщений: 52

вот, кста. код:
$("#menu td:not(#add_cook)").each(function(){
        $(this).click(function(){
            $("#menu td:not(#add_cook)").not($(this)).css('backgroundColor','');
            $(this).css('backgroundColor','#740D13');
            $id = $(this).attr('id');
            $("#text").hide("drop",{direction: 'left'},600,function(){
                $(this).load("php/"+$id+".php",function(){
                    $(this).width(760);
                    $conH = $(this).height();
                    if($("#content").height() == $conH){$time = 0;}
                    else{$time = 1000;}
                    $("#content").animate({'height':$conH},$time,function(){
                        $("#text").show("drop",{direction: 'right'},400);
                    });
                });
            });
        });
    });


Может сделать проверку при клике? Как сделать проверку, анимируется или сейчас $("#text") или нет?

Последний раз редактировалось kiff86, 18.04.2011 в 00:27.
Ответить с цитированием
  #7 (permalink)  
Старый 18.04.2011, 04:49
Профессор
Отправить личное сообщение для Matre Посмотреть профиль Найти все сообщения от Matre
 
Регистрация: 07.01.2011
Сообщений: 582

Я для этого придумывал небольшой паттерн:

$(element).one("click", function () {
	var self = $(this), callee = arguments.callee;
	self.animate({ ... }, 1000, function () {
		self.one("click", callee);
	});
});


Т.е. навешиваем на элемент обработчик, который сработает только один раз (.one() же) и когда анимация закончилась, навешиваем его вновь.
Ответить с цитированием
  #8 (permalink)  
Старый 18.04.2011, 17:14
Аспирант
Отправить личное сообщение для kiff86 Посмотреть профиль Найти все сообщения от kiff86
 
Регистрация: 26.03.2011
Сообщений: 52

Matre,
все бы хорошо, если бы у меня была одна кнопочка(пункт меню).. в таком варианте, функция не будет "дублироваться сама собой", но если есть два элемента? Получается анимация будет выполняться, и если я нажму на пункт меню, который только что нажал, то все ок, но если я нажму на следующий пункт меню при незавершенной анимации.. опять дабл..
Ответить с цитированием
  #9 (permalink)  
Старый 18.04.2011, 17:16
Аспирант
Отправить личное сообщение для kiff86 Посмотреть профиль Найти все сообщения от kiff86
 
Регистрация: 26.03.2011
Сообщений: 52

может в начале как-то остановить анимацию если она присутствует... но как???
или проверять если идет анимация - то ждать ее завершения..

Последний раз редактировалось kiff86, 18.04.2011 в 17:19.
Ответить с цитированием
  #10 (permalink)  
Старый 18.04.2011, 17:18
Профессор
Отправить личное сообщение для Matre Посмотреть профиль Найти все сообщения от Matre
 
Регистрация: 07.01.2011
Сообщений: 582

Для этого есть ещё один паттерн:

$(parent).one("click", function (event) {
	// делаем проверку, является ли event.target элементом, клик на который нужно обработать
	// делаем действия, которые я привёл в первом примере, только .one() вешаем уже на parent
});


parent — общий для обоих элементов родительский эл-т.
Т.о. мы делаем один обработчик на все элементы.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос по учебнику Invis1ble Сайт Javascript.ru 12 21.03.2011 20:06
Как реализована animate()? балерун jQuery 7 17.03.2011 03:22
Вопрос по замыканиям Goodfella Общие вопросы Javascript 20 09.03.2011 01:21
jQuery, функция animate(), рекурсия xintrea jQuery 12 03.01.2011 12:33
Теоретический вопрос. gods33 (X)HTML/CSS 10 16.12.2010 23:49