Jquery - отложить обратный вызов до завершения нескольких анимаций

Вам нужно учитывать ваши цели:

1) Вы пытаетесь запретить людям читать / изменять ваш код? Если да, вам понадобится инструмент обфускации / шифрования. Я использовал Zend Guard с хорошим успехом.

2) Вы пытаетесь предотвратить несанкционированное перераспределение вашего кода? Лицензия EULA / proprietary предоставит вам юридическую силу, чтобы предотвратить это, но на самом деле не остановит ее. Схема ключа / активации позволит вам активно контролировать использование, но может быть удалена, если вы также не зашифруете свой код. Zend Guard также имеет возможности блокировать конкретный скрипт для конкретной клиентской машины и / или создавать временные версии кода, если это то, что вы хотите сделать.

Я не знаком с vBulletin и т. П. , но им нужно либо зашифровать / обфускать, либо доверять своим пользователям, чтобы они поступали правильно. В последнем случае у них есть защита от наличия лицензионного соглашения, которое запрещает поведение, которое они считают нежелательным, и правовую систему для защиты от нарушений лицензионного соглашения.

Если вы не подготовлены / не можете предпринять юридические действия для защиты своего программного обеспечения, и вы не хотите шифровать / обфускации, ваши варианты: a) Отпустите его с помощью EULA, чтобы у вас была юридический вариант, если вам когда-либо понадобится, и надеяться на лучшее, или б) рассмотреть вопрос о том, может ли лицензия с открытым исходным кодом быть более подходящей и просто разрешить перераспределение.

23
задан kapa 9 June 2011 в 20:28
поделиться

6 ответов

Альтернативой ответу @ Ross, который всегда будет вызывать обратный вызов на последней кнопке, которая исчезнет (которая может быть, а может и не быть последней кнопкой, которая была сообщена анимированной), может быть:

var buttons = $(".buttons");
var numbuttons = buttons.length;
var i = 0;

buttons.fadeIn('fast', function() {
    i++;
    if(i == numbuttons) {
        //do your callback stuff
    }
});
4
ответ дан Riley Dutton 9 June 2011 в 20:28
поделиться

jQuery представил обещание в версии 1.6 и гораздо более элегантно, чем добавление счетчиков.

Пример:

// Step 1: Make your animation
$(".buttons").each(function() {
    $(this).fadeIn("fast");
});

// Step 2: Attach a promise to be called once animation is complete
$(".buttons").promise().done(function() {
    // my callback
});
82
ответ дан Sebastian Patten 9 June 2011 в 20:28
поделиться

Для сбора несвязанных анимаций элементов в один обратный вызов вы можете сделать это:

$.when(
    $someElement.animate(...).promise(),
    $someOtherElement.animate(...).promise()
).done(function() {
    console.log("Both animations complete");
});
14
ответ дан parliament 9 June 2011 в 20:28
поделиться
var $buttons = $('.buttons');

$buttons.each( function (index) { 
    if ( index == $buttons.length - 1 ) {
        $(this).fadeIn('fast',function() {
           // my callback
        });
    } else {
        $(this).fadeIn('fast');
    }
});

Не проверено, но обратный вызов должен применяться только к последней кнопке.

1
ответ дан Ross 9 June 2011 в 20:28
поделиться

Идея моего решения - сохранить счетчик. Всякий раз, когда анимация заканчивается, вы просто увеличиваете этот счетчик, таким образом, вы можете видеть, когда вы наконец нажмете кнопку. Не забудьте установить счетчик на ноль, когда все будет сделано, потому что вы можете повторить это (скрыть их снова и показать их снова).

var $buttons=$('.buttons'),
    button_n=$buttons.length,
    button_counter=0;
$buttons.fadeIn('fast', function () {
    if (button_counter==button_n-1) {
        alert('It is all done!');
        button_counter=0;
    } else {
        button_counter++;
    }
});
0
ответ дан kapa 9 June 2011 в 20:28
поделиться
onClickBtnEdit = function(){
    var $EditDel = $($btnEdit).add($btnDel);
    var btns = $EditDel.size();

    $EditDel.fadeOut("def",function(){                   
        btns--;
        if(btns===0){
            $($btnSave).add($btnCancel).fadeIn("slow");
        }
    });
};
0
ответ дан DarthJDG 9 June 2011 в 20:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: