Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Блокировка на время анимации (https://javascript.ru/forum/jquery/21121-blokirovka-na-vremya-animacii.html)

kiff86 29.08.2011 21:23

Блокировка на время анимации
 
Добрый день, вот сижу вспоминаю и не могу вспомнить. Есть анимация, которая вызывается через функцию..
function test(){
  $(".test").fadeTo("slow",0.4,function(){
     ... // показываю сообщение
  });
}

Я хочу чтобы до момента завершения fadeTo юзер не мог никуда нажать.

Просто дальше по коду у меня идет обработка того же элемента:

$(".test").click(function(){
  $(this).fadeOut("slow");
});

получается пока идет затемнение, юзер может нажать на всплывающий элемент и он начнет пропадать(fadeOut).. хотя действие после fadeTo будет все равно выполнено(показ сообщения).. Хотелось бы чтобы во время выполнения fadeTo юзер не мог ничего нажать))

melky 29.08.2011 21:29

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

B@rmaley.e><e 29.08.2011 21:47

Лучше вызовите stop перед fadeOut.
А так — можно показать див-заглушку на весь экран, которая будет перехватывать клики.

kiff86 29.08.2011 22:32

просто я читал про метод arguments.callee там же есть такая тема, что функция выполниться один раз.. У меня была такая реализация, но я так и не понял до конца принцип работы.. может кто подскажет как работает сие чудо) Я понимаю, что это ссылка на туже функцию, так ведь?

B@rmaley.e><e 29.08.2011 22:37

arguments.callee указывает на функцию, вызвавшую текущую функцию. Чем оно Вам поможет?

kiff86 29.08.2011 22:48

ну вот например у меня есть такая конструкция. которая позволяет блокировать повторные нажатия:
$("#menu table").one("click", function (event) {
        var callee = arguments.callee;
        if ($(event.target).is("#menu td:not(#add_cook)")) {
            $("#menu td:not(#add_cook)").not($(event.target)).css('backgroundColor','');
            $(event.target).css('backgroundColor','#740D13');
            $id = $(event.target).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);
                        $("#menu table").one("click", callee);
                    });
                });
            });
        }
    });


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