в jQuery оптимизация обратных вызовов


У меня много повторяющихся блоков кода и хотите оптимизировать/упростить их:

    function animationInit() {
    content = $('#content')
        .bind('show',function(event, f) {
            $(this).animate({right:0}, lag + 200, function() {
                if (f) f();
            });
        })
        .bind('hide',function(event, f) {
            $(this).animate({right:-700}, lag + 200, function() {
                if (f) f();
            });
        });

    hotelnav = $('#hotel')
        .bind('show',function(event, f) {
            hotelnav.removeClass('small');
            $(this).animate({left:0}, lag + 200, function() {
                if (f) f();
            });
        })
        .bind('hide',function(event, f) {
            $(this).animate({left:isGallery()?-300:-300}, lag + 200, function() {
                hotelnav.addClass(isGallery()?'small':'');
                if (f) f();
            });
        });

    bottompanel = $('#bottompanel')
        .bind('show',function(event, f) {
            $(this).animate({bottom:40}, lag + 200, function() {
                if (f) f();
            });
        })
        .bind('hide',function(event, f) {
            $(this).animate({bottom:-120}, lag + 200, function() {
                if (f) f();
            });
        });

    booknow = $('#booknow')
        .bind('show',function(event, f) {
            $(this).fadeIn(lag + 200, function() {
                if (f) f();
            });
        })
        .bind('hide',function(event, f) {
            $(this).fadeOut(lag + 200, function() {
                if (f) f();
            });
        });     
};

Как я могу оптимизировать повторяющиеся части кода в функции обратного вызова? Им пытаются создать отдельную функцию такой:

function cb(callback) {
    if (callback) callback();
};

... но просто есть много асинхронных обратных вызовов...



233
2
задан 7 сентября 2011 в 09:09 Источник Поделиться
Комментарии
1 ответ

Я не понимаю необходимость

function() {
if (f) f();
}

поместить ф , а не все это. Если это неопределено, это не называется.

е.г

.bind('show',function(event, f) {
$(this).animate({right:0}, lag + 200, f);
});

Еще одна мысль пришла ко мне. Функции, которые вы используете могут быть учтены и использованы как:

function animateRight(event, f, rightValue, delay)
{
$(this).animate({right: rightValue}, lag + delay, f);
}

(или если вы не можете передать эту информацию в:

function animateRight(event, f, rightValue, delay)
{
return new function()
{
$(this).animate({right: rightValue}, lag + delay, f);
}
}

1
ответ дан 8 сентября 2011 в 07:09 Источник Поделиться