2012-01-24 6 views
0

Я знаю, что официальный способ ждать анимации - это обратный вызов, отправленный в функцию анимации. Возможно ли каким-либо образом запросить очередь анимации, выполнив цикл ожидания (с watchdog) вне вызова анимации?jQuery ждать анимации, запросив очередь анимации?

Пример (и конкретная проблема)

Мы используем jQuery lightbox 0.5и переместили кнопку закрытия и добавил некоторую информацию содержания. Коробка отображается корректно, за исключением IE8, где нижние позиции расположены слишком далеко вверх, пока страница не будет изменена или не появится мышь.

Кажется, что для оживления IE требуется ожидание между анимациями. Я хотел бы исправить эту проблему без изменения потока кода. Является ли это возможным?

Это из JQuery лайтбокса:

/** 
* Show the prepared image 
* 
*/ 
function _show_image() { 
    $('#lightbox-loading').hide(); 
    $('#lightbox-image').fadeIn(function() { 
     _show_image_data(); 
     _set_navigation(); 
    }); 
    _preload_neighbor_images(); 
}; 
/** 
* Show the image information 
* 
*/ 
function _show_image_data() { 
    $('#lightbox-container-image-data-box').slideDown('fast'); 

Если изменить это так, он прекрасно работает в IE8:

/** 
* Show the prepared image 
* 
*/ 
function _show_image() { 
    $('#lightbox-loading').hide(); 
    $('#lightbox-image').fadeIn(function() { 
     _show_image_data(); 
    }); 
    _preload_neighbor_images(); 
}; 
/** 
* Show the image information 
* 
*/ 
function _show_image_data() { 
    $('#lightbox-container-image-data-box').slideDown('fast', function() { 
     _set_navigation(); 
    }); 

Могу ли я ждать очереди анимации для определенного элемента? Код

Псевдо:

/** 
* Show the prepared image 
* 
*/ 
function _show_image() { 
    $('#lightbox-loading').hide(); 
    $('#lightbox-image').fadeIn(function() { 
     _show_image_data(); 
     var timeout = 500; 
     $('#lightbox-container-image-data-box').waitForAnimation(timeout); 
     _set_navigation(); 
    }); 
    _preload_neighbor_images(); 
}; 
/** 
* Show the image information 
* 
*/ 
function _show_image_data() { 
    $('#lightbox-container-image-data-box').slideDown('fast'); 
+0

Посмотрите на [jQuery.fn.queue] (http://api.jquery.com/queue/). – Avaq

ответ

2

Вы можете queue свои собственные функции в очереди эффектов (FX), и даже delay их, если вы хотите. Просто убедитесь, что вы применяете его к тому же элементу, что и lightbox.

$('#lightbox-image').delay(1000).queue(function(next) { 
    // your code here 

    if (next) next(); 
}); 
+0

Работает отлично! Благодаря! :) –

Смежные вопросы