Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: js jquery image iframe onload
 
 автор: sl1p   (16.02.2012 в 21:48)   письмо автору
 
 

Есть модальное окно в котором открывается ифрейм. В нем большое изображение и немного текста, нужно после загрузки всего содержимого обратиться в родительское(либо узнать о загрузке ифрейма из того же родительского) окна и отресайзить окно. Если из самого ифрейма ресайзить например при onload документа или большой картинки, которая грузится дольше всех элементов, то правильный ресайз бывает раз через раз... т.е не всегда возвращаются реальные размеры документа.
Как же все таки получить нужные размеры корректно?

  Ответить  
 
 автор: ЯСА   (16.02.2012 в 22:30)   письмо автору
 
   для: sl1p   (16.02.2012 в 21:48)
 

1. Принципиальной разницы - из какого именно документа доставать данные - нет и быть не может.

2. То, что результат работы скрипта бывает правильным через раз, явно говорит о том, что пользуетесь не теми свойствами. Например, вместо нужного в данном случае clientWidth|Height используете offsetWidth|Height (или не включили поддержку одинакового расчёта client-ских значений через <!doctype>).

3. Мей би, забываете о том, что разные браузеры по разному считают высоту тела документа:
в MSIE вся видимая страница - это тело документа
в Mozilla тело документа по нижнему краю совпадает с bottom последнего элемента.

  Ответить  
 
 автор: sl1p   (17.02.2012 в 00:37)   письмо автору
 
   для: ЯСА   (16.02.2012 в 22:30)
 

не уточнил, юзаю jquery и определяю размеры просто $('body').width() / .height()
пример (я уже даже таймаут поставил чтобы этот скрипт на всякий случай "отстал")..

$(document).ready(function(){
    setTimeout(function(){
        if(top != self) {
            $('#yii-jcrop-1').load(function()
            {
                var obj = $('body');
                var w = obj.width()+10;
                var h = obj.height()+10;
                top.$.colorbox.resize({innerWidth: w, innerHeight: h});
            });
        }
    }, 100);
});

#yii-jcrop-1 - это изображение. На локалке вообще не срабатывает событие.. а только ready()
на сервере наоборот, непонятно какого черта..

Если попробовать просто расчитать без ожидания изображения:
$(document).ready(function(){
    setTimeout(function(){
        if(top != self) {
            
                var obj = $('body');
                var w = obj.width()+10;
                var h = obj.height()+10;
                top.$.colorbox.resize({innerWidth: w, innerHeight: h});
            
        }
    }, 100);
});

правильно получаем высоту, но неправильная ширина совсем (отдается ширина которая задана ифрейму).
зы. доктайп есть, тестю исключительно в ФФ, другие пока не интересуют.

  Ответить  
 
 автор: AlexSol   (17.02.2012 в 10:26)   письмо автору
 
   для: sl1p   (17.02.2012 в 00:37)
 

у colorbox есть событие cbox_load.
попробуйте по этому событию определять размер

  Ответить  
 
 автор: sl1p   (17.02.2012 в 12:07)   письмо автору
 
   для: AlexSol   (17.02.2012 в 10:26)
 

пробовал) оно срабатывает очень рано

  Ответить  
 
 автор: AlexSol   (17.02.2012 в 13:13)   письмо автору
 
   для: sl1p   (17.02.2012 в 12:07)
 

ок. оно срабатывает после того как загружен dom
значит вам нужно по этому событию обратиться к полученному контенту, найти там img и повесить на него событие load()

  Ответить  
 
 автор: sl1p   (17.02.2012 в 23:26)   письмо автору
 
   для: AlexSol   (17.02.2012 в 13:13)
 

проблема была в том, что я вешал событие onload на картинку в $(document).ready :D
тобишь событие вешалось когда уже все загружено. На локалке это происходит моментально и изображение уже загружено когда вешается событие.. на сервер медленнее..

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования