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, время: 16:24. |