google chrome ajax и модальное окно facebox
Уважаемые форумчане, помогите решить проблему. Использую плагин facebox для показа картинок. Во всех браузерах все хорошо. Только Хром портит кровь. Смещает фейсбокс в право.
Причину я уже нашел, но как ее победить не могу понять. Блоку #facebox задается абсолютное позиционирование. top вычисляется от высоты окна, это я понял $('#facebox').show().css({ top: getPageScroll()[1] + (getPageHeight() / 10), left: $(window).width() / 2 - ($('#facebox .popup').outerWidth() / 2) }) А вот с left проблема. Вторая часть выражения ($('#facebox .popup').outerWidth() / 2) в хроме просто не вычисляется. Я так понимаю, потому что вычисление происходит еще до загрузки изображения в фейсбокс. Только хром страдает такой хренью. Подскажите как можно побороть это? Как просчитать ширину загружаемого изображения? |
до загрузки получить ширину изображения можно только из атрибута width тэга img или из css.
|
Попробуйте алертнуть outerWidth. Если нормального значения в alert'е не будет, значит добавляйте к картинке некий тег width. Либо .css("width") получать. Если же будет, то проблема в скрипте. Напишите, был алерт или нет (вернее, значение в нем).
|
Есть оченно большое подозрение что facebox умеет центрироваться самостоятельно. Почитайте доки.
|
Цитата:
Можно конечно приделать костыли и на сервер каким то образом узнавать размер изображения. Но это уже будут костыли |
Цитата:
Да фейсбокс центует сам. Выше я приводил кусок кода. Но проблема не в нем а в хроме, который выполняет джаваскрипт до загрузки изображения. Почему то. |
Цитата:
|
Цитата:
ведь даже если она идёт последней в коде, это ещё не значит, что она последней загрузится. А если так, то уж $(window).load() |
Вызывайте процесс позиционирования ПОСЛЕ загрузки картинок, например так:
$("img").one('load', function() { // ваш код $('#facebox').show().css({ top: getPageScroll()[1] + (getPageHeight() / 10), left: $(window).width() / 2 - ($('#facebox .popup').outerWidth() / 2) }) // конец вашего кода }).each(function() { if(this.complete) $(this).load(); }); Ссылки по теме: 1, 2. Задача, если хотите по-настоящему вникнуть в суть вопроса и есть свободное время. Цитата:
Цитата:
|
глупость конечно, но можно ещё использовать сложную конструкцию с проверкой .prop("complete") у всех картинок
|
Часовой пояс GMT +3, время: 02:49. |