Я пытаюсь создать слайд-шоу jQuery Cycle, в котором изображения разных размеров центрированы по вертикали и горизонтали, а также изменяются в зависимости от размера окна. Некоторые из них являются прямыми css, но мне нужно динамически настроить «верх», «слева», «маржа-сверху» и «маржа-слева» на каждом изображении, прежде чем исчезать на первом изображении слайд-шоу.
Таким образом, я считаю, что необходимо создать обратный вызов, в котором размеры и поля устанавливаются до появления изображений. Не могу понять, как лучше всего это сделать.
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();
});
Однако я не вижу ожидаемого результата. Постепенное появление первого изображения срабатывает до того, как произойдут расчеты и позиционирование.
Думая, что «отображение: нет» может сбить с толку (возможно, ничего не вычисляется до тех пор, пока не будет «отображение: блок», я попытался использовать:
#gallery img:first-child {
display:block;
opacity:0;
}
...А затем анимация до полной непрозрачности вместо затухания - но результат тот же.
Что я делаю не так??