Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > Как запретить реагирование на частые нажатия


Автор: MakTpaxep 16.8.2013, 04:17
Код


$(".slider-control-right").click(function(){
        $(".slider-slides").children('#slide' + slider_counter).fadeOut(500,function(){    
            slider_counter++;
            if(slider_counter == (slider_slides_count+1))
                slider_counter = 1;
            $(".slider-slides").children('#slide' + slider_counter).fadeIn(500);
        });
    });


Если на стрелку .slider-control-right нажимать очень часто, то слайдер ведёт себя неадекватно. Я хочу это запретить на время смены слайдов.
Пробовал что-то типа такого, объясните почему переменная push_defense в начале функции всегда равна 0? Она же вроде глобальная
Код

    var slider_counter = 1;
    var slider_slides_count = 8;
    var push_defense = 0;
    $(".slider-control-left").click(function(){
        if(push_defense == 1)
            return;
        push_defense = 1;
        $('.block1').html(push_defense);
        $(".slider-slides").children('#slide' + slider_counter).fadeOut(500,function(){
            slider_counter--;
            if(slider_counter == 0)
                slider_counter = slider_slides_count;
            $(".slider-slides").children('#slide' + slider_counter).fadeIn(500);
        });
        push_defense = 0;
    });

Автор: ksnk 16.8.2013, 08:42
а так?
Код

                        ... slider_counter).fadeIn(500, function(){push_defense = 0;});
        });
        //push_defense = 0;
    });



fadeIn и fadeOut не выполняют анимацию сами, они просто помещают нужную функцию в "анимационную машину" jQuery и сразу возвращаются. так что push_defense  вполне законно был ==0

Автор: MakTpaxep 16.8.2013, 14:15
Цитата

fadeIn и fadeOut не выполняют анимацию сами, они просто помещают нужную функцию в "анимационную машину" jQuery и сразу возвращаются. так что push_defense  вполне законно был ==0

но так всё равно не то:

Код

    var slider_counter = 1;
    var slider_slides_count = 8;
    var push_defense = 0;
    $(".slider-control-left").click(function(push_defense){
        //$('.block1').html(push_defense);
        alert(push_defense);
        if(push_defense == 1)
            return;
        push_defense = 1;        
        $(".slider-slides").children('#slide' + slider_counter).hide(500,function(){
            slider_counter--;
            if(slider_counter == 0)
                slider_counter = slider_slides_count;
            $(".slider-slides").children('#slide' + slider_counter).show(500);
        });
    });

alert выводит [object Object]

Автор: olgaturist 16.8.2013, 14:18
Спасибо за подсказску

Автор: ksnk 16.8.2013, 14:48
Цитата(MakTpaxep @  16.8.2013,  14:15 Найти цитируемый пост)
click(function(push_defense){

Какой, однако, забавный способ отстрелить себе ногу smile 

Зачем там push_defense?

Автор: MakTpaxep 16.8.2013, 16:28
Цитата

Какой, однако, забавный способ отстрелить себе ногу 

Я уж и не помню как мне это пришло в голову))
Ваш совет помог. Спасибо! Рабочий код получился такой:
Код

    var slider_counter = 1;
    var slider_slides_count = 8;
    var push_defense = 0;
    $(".slider-control-left").click(function(){
        if(push_defense == 1)
            return;
        push_defense = 1;        
        $(".slider-slides").children('#slide' + slider_counter).hide(500,function(){
            slider_counter--;
            if(slider_counter == 0)
                slider_counter = slider_slides_count;
            $(".slider-slides").children('#slide' + slider_counter).show(500);
            push_defense = 0;    
        });
    });

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)