Я пытаюсь создать слайд-шоу jQuery Cycle, в котором изображения разных размеров располагаются по центру по вертикали и горизонтали, а также изменяют размер до любого размера окна. Некоторые из них являются прямыми CSS, но мне нужно динамически корректировать «top», «left», «margin-top» и «margin-left» на каждом изображении, прежде чем оно исчезнет в первом изображении слайд-шоу.
Таким образом, я считаю, что необходимо создать обратный вызов, где размеры и поля устанавливаются до появления изображений. Не могу найти лучший способ сделать это.
CSS прост. По существу:
#gallery img {
max-height: 100%;
position:absolute;
display:none;
}
А грубый срез .js будет:
$(window).bind("load resize", function() {
$('#gallery img').each(function(i) {
var ih = $(this).height();
var iw = $(this).width();
var fh = Math.ceil(ih / 2);
var fw = Math.ceil(iw / 2);
$(this).css({
'top' : '50%',
'left' : '50%',
'margin-top' : '-' + fh + 'px',
'margin-left' : '-' + fw + 'px'
});
},function() {
$('#gallery img:first').fadeIn(3000, function() {
$('#gallery').cycle();
});
Однако я не вижу ожидаемого результата. FadeIn первого img срабатывает до того, как произойдут вычисления и позиционирование.
Думая, что «display: none» может сбить с толку (может быть, ничего не рассчитано, пока не будет «display: block», я пытался использовать:
#gallery img:first-child {
display:block;
opacity:0;
}
.. А затем анимация до полной непрозрачности вместо fadeIn - но результат тот же.
Что я делаю не так?