Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 27.05.2010, 19:51
Новичок на форуме
Отправить личное сообщение для ddal.reg Посмотреть профиль Найти все сообщения от ddal.reg
 
Регистрация: 26.03.2010
Сообщений: 4

onresize в Opera
Всем здравствуйте!

Делаю блокирующий экран div с затемнением, отображающийся во время асинхронной загрузки некоторых данных на клиента.
Натолкнулся на проблему.
Opera производит вызов window.onresize, скажем так, - периодически.
Причем, период этот хорошо заметен для глаза.
Получается, что при плавном растягивании окна по высоте, div увеличивается вслед за окном заметными рывками.

В обработчике onresize пишу:

oDiv.style.height = document.body.scrollHeight;


Везде, кроме Оперы, работает хорошо - div увеличивается в высоту вместе с окном, незаметно для глаза.

Есть вариант решения - указать нереальную высоту:

oDiv.style.height = '19999px';


Такое решение не устраивает тем, что влечет к появлению вертикального скроллера.

Что не есть гуд.

Подскажите, как побороть хитрую Оперу?
Ответить с цитированием
  #2 (permalink)  
Старый 27.05.2010, 21:33
Аватар для B@rmaley.e><e
⊞ Развернуть
Отправить личное сообщение для B@rmaley.e><e Посмотреть профиль Найти все сообщения от B@rmaley.e><e
 
Регистрация: 11.01.2010
Сообщений: 1,810

А зачем Вы задаете размеры дива в пикселях? Задайте через CSS по 100% ширине и высоте.
Ответить с цитированием
  #3 (permalink)  
Старый 27.05.2010, 21:49
Новичок на форуме
Отправить личное сообщение для ddal.reg Посмотреть профиль Найти все сообщения от ddal.reg
 
Регистрация: 26.03.2010
Сообщений: 4

В случае, когда страница со скроллером, невидимая ее часть не входит в эти 100%.
То есть, прокрутив страницу вниз, пользователь увидит незаблокированный кусок.
Ответить с цитированием
  #4 (permalink)  
Старый 27.05.2010, 22:06
Аватар для B@rmaley.e><e
⊞ Развернуть
Отправить личное сообщение для B@rmaley.e><e Посмотреть профиль Найти все сообщения от B@rmaley.e><e
 
Регистрация: 11.01.2010
Сообщений: 1,810

position:fixed?
Ответить с цитированием
  #5 (permalink)  
Старый 28.05.2010, 12:12
Новичок на форуме
Отправить личное сообщение для ddal.reg Посмотреть профиль Найти все сообщения от ddal.reg
 
Регистрация: 26.03.2010
Сообщений: 4

position:absolute;

Попробовал с position:fixed и 100% высоты.
В Опере косяк остался, но субъективно - уже не так сильно выражен.
Плюс, перестало работать затемнение в IE7

Стиль div-а изначально формируется так:

try{oDiv.style.MozOpacity=0.4}catch(e){}
		try{oDiv.style.KHTMLOpacity=0.4}catch(e){}
		try{oDiv.style.opacity=0.4}catch(e){}
		try{
			var oS = window.document.createStyleSheet(), oP = window.document.createStyleSheet();
			oS.media = "screen";oS.addRule('#DMASK','background-color:#CCCCCC;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=40);');
			oP.media = "print"; oP.addRule('#DMASK','display:none;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=0,enabled=0);');		
		}catch(e){}
		oDiv.style.backgroundColor="#CCCCCC";
		oDiv.style.position='absolute';
//		oDiv.style.position='fixed';
		oDiv.style.top=0;
		oDiv.style.left=0;
		oDiv.style.zIndex =1000;
		oDiv.style.width="100%";
		oDiv.style.height= document.body.scrollHeight;
//		oDiv.style.height = '100%';
		oDiv.innerHTML=' ';

Последний раз редактировалось ddal.reg, 28.05.2010 в 13:24.
Ответить с цитированием
  #6 (permalink)  
Старый 28.05.2010, 15:06
Аватар для B@rmaley.e><e
⊞ Развернуть
Отправить личное сообщение для B@rmaley.e><e Посмотреть профиль Найти все сообщения от B@rmaley.e><e
 
Регистрация: 11.01.2010
Сообщений: 1,810

Сообщение от ddal.reg
Плюс, перестало работать затемнение в IE7
У осла с fixed'ом проблемы, костыль нужен.
В Вашем случае могу посоветовать попробовать setInterval. Но опера вызывает onresize с некоторой периодичность не из-за прихоти разработчиков, а в целях оптимизации. Обычно в onresize помещают перевычисление параметров и, как следствие, перерисовку.

Последний раз редактировалось B@rmaley.e><e, 28.05.2010 в 15:09.
Ответить с цитированием
  #7 (permalink)  
Старый 28.05.2010, 17:28
Новичок на форуме
Отправить личное сообщение для ddal.reg Посмотреть профиль Найти все сообщения от ddal.reg
 
Регистрация: 26.03.2010
Сообщений: 4

Сообщение от B@rmaley.e><e Посмотреть сообщение
В Вашем случае могу посоветовать попробовать setInterval.
Имеете в виду, обновлять размеры div через минимальный интервал?

Сообщение от B@rmaley.e><e Посмотреть сообщение
Но опера вызывает onresize с некоторой периодичность не из-за прихоти разработчиков, а в целях оптимизации.
Да, увидев такой "эффект" так и понял.
Интересно, почему в других браузерах такое не применяется.
Ответить с цитированием
  #8 (permalink)  
Старый 28.05.2010, 17:37
Аватар для B@rmaley.e><e
⊞ Развернуть
Отправить личное сообщение для B@rmaley.e><e Посмотреть профиль Найти все сообщения от B@rmaley.e><e
 
Регистрация: 11.01.2010
Сообщений: 1,810

Сообщение от ddal.reg
Имеете в виду, обновлять размеры div через минимальный интервал?
Проверять, не изменились ли размеры окна, и, при необходимости, обновлять размеры дива.
Ответить с цитированием
  #9 (permalink)  
Старый 30.05.2010, 23:29
Аватар для B~Vladi
Модератор Всея Форума
Отправить личное сообщение для B~Vladi Посмотреть профиль Найти все сообщения от B~Vladi
 
Регистрация: 14.05.2009
Сообщений: 4,021

Тут вообще нет проблемы. Пишем в стилях:
html, body {
  width:100%;
  height: 100%;
}
.background {
  position:fixed;
  width:100%;
  height: 100%;
}


При показе фона добавляем свойства для ИЕ:
html, body {
  overflow:hidden;
}
.background {
  position:absolute;
}


И, соответственно, показываем блок. При скрытии - убираем свойства.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
onresize Destrifer Events/DOM/Window 3 15.08.2011 14:28
Opera отдаёт неправильный код функциональных клавиш. NT Man Opera, Safari и др. 1 19.01.2010 02:45
opera mobile demi Opera, Safari и др. 4 11.02.2009 11:22
Не возвращается XML-ответ в Opera после AJAX-запроса Yojik Общие вопросы Javascript 4 17.03.2008 05:56