Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 24.08.2012, 00:48
Интересующийся
Отправить личное сообщение для foreach Посмотреть профиль Найти все сообщения от foreach
 
Регистрация: 04.03.2011
Сообщений: 22

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)

в хроме просто не вычисляется. Я так понимаю, потому что вычисление происходит еще до загрузки изображения в фейсбокс.
Только хром страдает такой хренью.
Подскажите как можно побороть это? Как просчитать ширину загружаемого изображения?
Ответить с цитированием
  #2 (permalink)  
Старый 24.08.2012, 01:09
Аватар для LittlePony
Кандидат Javascript-наук
Отправить личное сообщение для LittlePony Посмотреть профиль Найти все сообщения от LittlePony
 
Регистрация: 19.08.2012
Сообщений: 100

до загрузки получить ширину изображения можно только из атрибута width тэга img или из css.
Ответить с цитированием
  #3 (permalink)  
Старый 24.08.2012, 01:53
Кандидат Javascript-наук
Отправить личное сообщение для Valdemor Посмотреть профиль Найти все сообщения от Valdemor
 
Регистрация: 30.03.2012
Сообщений: 128

Попробуйте алертнуть outerWidth. Если нормального значения в alert'е не будет, значит добавляйте к картинке некий тег width. Либо .css("width") получать. Если же будет, то проблема в скрипте. Напишите, был алерт или нет (вернее, значение в нем).
Ответить с цитированием
  #4 (permalink)  
Старый 24.08.2012, 03:37
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,577

Есть оченно большое подозрение что facebox умеет центрироваться самостоятельно. Почитайте доки.
__________________
29375, 35
Ответить с цитированием
  #5 (permalink)  
Старый 27.08.2012, 23:21
Интересующийся
Отправить личное сообщение для foreach Посмотреть профиль Найти все сообщения от foreach
 
Регистрация: 04.03.2011
Сообщений: 22

Сообщение от Valdemor Посмотреть сообщение
Попробуйте алертнуть outerWidth. Если нормального значения в alert'е не будет, значит добавляйте к картинке некий тег width. Либо .css("width") получать. Если же будет, то проблема в скрипте. Напишите, был алерт или нет (вернее, значение в нем).
Алерт выводит 0. А передать width нет возможности. У меня в базе записаны названия изображений, а php скрипт формирует разметку, задает путь к файлу и истинного размера изображения не знает.
Можно конечно приделать костыли и на сервер каким то образом узнавать размер изображения. Но это уже будут костыли
Ответить с цитированием
  #6 (permalink)  
Старый 27.08.2012, 23:24
Интересующийся
Отправить личное сообщение для foreach Посмотреть профиль Найти все сообщения от foreach
 
Регистрация: 04.03.2011
Сообщений: 22

Сообщение от Aetae Посмотреть сообщение
Есть оченно большое подозрение что facebox умеет центрироваться самостоятельно. Почитайте доки.
Доки изучил. И не только по фейсбоксу. Почти во всех *боксах такая хрень и только в хроме.
Да фейсбокс центует сам. Выше я приводил кусок кода. Но проблема не в нем а в хроме, который выполняет джаваскрипт до загрузки изображения.
Почему то.
Ответить с цитированием
  #7 (permalink)  
Старый 27.08.2012, 23:30
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Сообщение от foreach
Подскажите как можно побороть это? Как просчитать ширину загружаемого изображения?
Поставьте атрибут onload последней подгружаемой картинке и по этому событию запускайте функцию ?
Ответить с цитированием
  #8 (permalink)  
Старый 28.08.2012, 09:48
Аватар для LittlePony
Кандидат Javascript-наук
Отправить личное сообщение для LittlePony Посмотреть профиль Найти все сообщения от LittlePony
 
Регистрация: 19.08.2012
Сообщений: 100

Сообщение от Deff Посмотреть сообщение
Поставьте атрибут onload последней подгружаемой картинке и по этому событию запускайте функцию ?
кстати, а разве можно управлять порядком загрузки картинок?
ведь даже если она идёт последней в коде, это ещё не значит, что она последней загрузится.

А если так, то уж $(window).load()
Ответить с цитированием
  #9 (permalink)  
Старый 28.08.2012, 10:57
Интересующийся
Отправить личное сообщение для yura_remnev Посмотреть профиль Найти все сообщения от yura_remnev
 
Регистрация: 01.07.2011
Сообщений: 9

Вызывайте процесс позиционирования ПОСЛЕ загрузки картинок, например так:
$("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. Задача, если хотите по-настоящему вникнуть в суть вопроса и есть свободное время.

Сообщение от LittlePony Посмотреть сообщение
кстати, а разве можно управлять порядком загрузки картинок?
Конечно же нет. Странная мысль по поводу установки обработчика на последнюю картинку.
Сообщение от LittlePony Посмотреть сообщение
А если так, то уж $(window).load()
$(window).load() не поможет, если картинки загружаются аяксом. В данном случае, как мне кажется, они загружаются аяксом.
Ответить с цитированием
  #10 (permalink)  
Старый 28.08.2012, 12:30
Аватар для LittlePony
Кандидат Javascript-наук
Отправить личное сообщение для LittlePony Посмотреть профиль Найти все сообщения от LittlePony
 
Регистрация: 19.08.2012
Сообщений: 100

глупость конечно, но можно ещё использовать сложную конструкцию с проверкой .prop("complete") у всех картинок
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
модальное окно div'ом codingfighter Общие вопросы Javascript 28 03.09.2013 15:07
Посоветуйте как сделать модальное окно battrack jQuery 3 12.07.2012 15:42
frames в google chrome sasha.sivakov@mail.ru Общие вопросы Javascript 1 28.02.2012 22:47
Подскажите как открыть модальное окно "fancybox" из скрипта js dgabets jQuery 1 18.02.2012 18:05
Как запустить модальное окно из информационного окна google maps? www123 jQuery 5 04.09.2011 23:38