onresize в Opera
Всем здравствуйте!
Делаю блокирующий экран div с затемнением, отображающийся во время асинхронной загрузки некоторых данных на клиента. Натолкнулся на проблему. Opera производит вызов window.onresize, скажем так, - периодически. Причем, период этот хорошо заметен для глаза. Получается, что при плавном растягивании окна по высоте, div увеличивается вслед за окном заметными рывками. В обработчике onresize пишу: oDiv.style.height = document.body.scrollHeight; Везде, кроме Оперы, работает хорошо - div увеличивается в высоту вместе с окном, незаметно для глаза. Есть вариант решения - указать нереальную высоту: oDiv.style.height = '19999px'; Такое решение не устраивает тем, что влечет к появлению вертикального скроллера. Что не есть гуд. Подскажите, как побороть хитрую Оперу? :) |
А зачем Вы задаете размеры дива в пикселях? Задайте через CSS по 100% ширине и высоте.
|
В случае, когда страница со скроллером, невидимая ее часть не входит в эти 100%.
То есть, прокрутив страницу вниз, пользователь увидит незаблокированный кусок. |
position:fixed?
|
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=' ';
|
Цитата:
В Вашем случае могу посоветовать попробовать setInterval. Но опера вызывает onresize с некоторой периодичность не из-за прихоти разработчиков, а в целях оптимизации. Обычно в onresize помещают перевычисление параметров и, как следствие, перерисовку. |
Цитата:
Цитата:
Интересно, почему в других браузерах такое не применяется. |
Цитата:
|
Тут вообще нет проблемы. Пишем в стилях:
html, body {
width:100%;
height: 100%;
}
.background {
position:fixed;
width:100%;
height: 100%;
}
При показе фона добавляем свойства для ИЕ:
html, body {
overflow:hidden;
}
.background {
position:absolute;
}
И, соответственно, показываем блок. При скрытии - убираем свойства. |
| Часовой пояс GMT +3, время: 05:41. |