JQuery: мне нужно антиспам на моей функции

У меня есть функция, которая показывает div в моей навигации при нажатии, и вы можете переключать его, чтобы он скрывался при повторном нажатии.

Проблема в том, что вы можете спамить по нему, чтобы анимация продолжала работать и нарушала работу div.

Мне нужен какой-то щелчок антиспама, я хочу, чтобы он дождался первой анимации.

Вот код:

$("#navDown").click(function(){
if($("#navExpand").height()===0){
    $('#navArrow').animateRotate(0, -180);
    $("#navExpand").animate({
        height: 150
    })
    $(".navExCon").delay(300).fadeToggle(150);
    }
else if($("#navExpand").height()===150)
    {
$(".navExCon").fadeToggle(150);
    $('#navArrow').animateRotate(180, 0);
    $("#navExpand").delay(300).animate({
        height: 0
    });
    };

});

ОБНОВЛЕНИЕ / решение

Это то, что я сделал: note: было бы лучше с использованием цвета на этом сайте, чтобы увидеть изменения.

$("#navDown").click("slow",function(){ // added time "slow": 600 u i think.
  if($("#navExpand").height()===0){
    $('#navArrow').animateRotate(0, -180);
    $("#navExpand").animate({
        height: 150
    },200)                    // added some time
    $(".navExCon").fadeToggle(100);
    }
    else if($("#navExpand").height()===150)
    {
    $(".navExCon").fadeToggle(250);
    $('#navArrow').animateRotate(180, 0);
    $("#navExpand").animate({
        height: 0
    },200);                  // added some time
    };
});

1 ответ

Вы можете иметь функцию обратного вызова, когда анимация закончена:

var animating = false;
$("#navDown").click(function(){
    if (animating) {
        return; // Don't start new animation
    }
    animating = true;

    if($("#navExpand").height()===0){
        $('#navArrow').animateRotate(0, -180);
        $("#navExpand").animate({
            height: 150
        })
        $(".navExCon").delay(300).fadeToggle(150, function() {
            // Will be called after animation is finished
            animating = false;
        });
    }
    else if($("#navExpand").height()===150)
    {
        $(".navExCon").fadeToggle(150);
        $('#navArrow').animateRotate(180, 0);
        $("#navExpand").delay(300).animate({
            height: 0
        }, function() {
            // Will be called after animation is finished
            animating = false;
        });
    }
});
Другие вопросы по тегам