>Форум Mozilla Россия http://forum.mozilla-russia.org/index.php >Разработка http://forum.mozilla-russia.org/viewforum.php?id=18 >Mozilla и document.body.clientWidth http://forum.mozilla-russia.org/viewtopic.php?id=16838 |
WEB_bobby > 01-05-2007 20:46:34 |
При полном разворачивании окна у меня срабатывает JavaScript функция, которая считывает параметр document.body.clientWidth и по этому параметру вычислются некоторые значения CSS. Проблема в том, что Мозила при полном разворачивании окна выдает document.body.clientWidth намного меньший чем IE и Опера. Вот максимально упрощенная версия кода. Если потребуется выложу полностью. - Но он не очень легко понятен. Поэтому лучше всего будет если вы поймете причину данной проблемы Выделить код Код:<script> window.onresize = function() { if (document.body.clientWidth <= 1024) { alert('<= 1024'); }else { alert(' >1024'); document.getElementById("X5_f").style.width = document.body.clientWidth - 392; } } </script> ____________________________________________________________________________________ |
Sergeys > 01-05-2007 22:56:16 |
=> Разработка |
Lynn > 02-05-2007 14:44:47 |
У меня приведённый код работает правильно |
WEB_bobby > 02-05-2007 15:20:00 |
Lynn пишет
Да. Сам по себе такой мини тест-код работает правильно. А вот на моей странице неправильно.Вопрос в этом случае становится еще более интересным.Вообщем смотрите, такая у меня беда... Document.body.clientWidth одинаков, но.... в разных в функциях JS одно и то же выражение с ним дает разные результаты! Вот неупрощенный JS код с моей страницы. Выделить код Код:<script lanaguage = "JavaScript"> window.onresize = function() { if (document.body.clientWidth <= 1024) document.getElementById("X1_f").style.width = "728px"; else { document.getElementById("X1_f").style.width = document.body.clientWidth - 392; alert(document.body.clientWidth); alert(document.getElementById("X1_f").style.width); } } function onLoadCheckWidth() { if (document.body.clientWidth <= 1024) document.getElementById("X1_f").style.width = "728px"; else { document.getElementById("X1_f").style.width = document.body.clientWidth - 392; alert(document.body.clientWidth); alert(document.getElementById("X1_f").style.width); } } </script> А вот теперь выведим этот чисто мазильный глюк(напоминаю что в IE и в Opera все ок. ) на чистую воду. Подставим значение document.body.clientWidth = 1246 в формулу: Получается: Значение document.getElementById("X1_f").style.width = 854; вычисленное вручную не совподает с значением вычисленным функцией JS document.getElementById("X1_f").style.width = 728. При том что исходные данные для формулы дала сама функция JS. При срабатывании function onLoadCheckWidth() поставленной на onload значение document.getElementById("X1_f").style.width = 854; получается в обоих случах: и в ходе ручного расчета и в ходе расчета функции JS одинаковым.Хотя alert(document.getElementById("X1_f").style.width) выводится совершенно пустым(непонятно кстати почему?), но тем не менее Еще один отдельный ключевой момент.Я написал отдельный тест-код из которого становится кое-что ясно.... Выделить код Код:<html> <head> <title>testWidth</title> <script> window.onresize = function() { if (document.body.clientWidth <= 1024) { alert(document.body.clientWidth); }else { document.getElementById("X1_f").style.width = document.body.clientWidth - 392; alert(document.body.clientWidth); alert(document.getElementById("X1_f").style.width); } } </script> </head> <body> <div id ="X1_f"></div> </body> </html> При запуске этого тест-кода функция window.onresize = function() срабатывает без глюка в вычислении Но остается не ясным что может повлиять на моей странице на |
Lynn > 02-05-2007 15:45:23 |
Наличие правильного DOCTYPE, при котором выражение становиться неверным, т.к. не указана единица измерения. Нужно Выделить код Код:document.getElementById("X1_f").style.width = document.body.clientWidth - 392 + 'px'; PS. Зачем вообще всё это? Может вам будет достаточно CSS-свойства min-height? |
WEB_bobby > 02-05-2007 16:07:36 |
Лин, большое человеческое спасибо. - Я уже себе всю голову на этой проблеме сломал.
Если б у меня вычислялось только то с удовольствием бы применил min-height.Но у меня там еще и paddingi боковых блоков вычислются. - их по другому никак не заставишь меняться при смене разрешения. Добавлено Срд 02 Май 2007 16:17:40 :
- было бы интересно тоже узнать причину... |
WEB_bobby > 02-05-2007 16:41:21 |
Конечно этот небольшой вопрос немного отклоняется от данной темы.Но мне кажется вы с легкостью на него ответете. Почему IE при уменьшении разрешения монитора(до 1024*768) выбирает в следующем коде else и соответственно выводит второй аlert со значением 1264? Опера и Мозилла правильно отслеживают - что разрешение уменьшилось.Почему же IE не понимает этого? window.onresize = function() |
WEB_bobby > 03-05-2007 01:21:54 |
Видимо тоже что такое И сам по себе этот мини-тест в IE тоже правильно понимает уменьшение размера тела.. - в случае когда надо было дописать 'px' мини-тест с тем же кодом работал корекктно в мозиле, а вот уже поставленный на мою страницу нет. Видимо когда инфы много обрабатывается вылазят все косяки. |
web > 24-08-2007 18:16:56 |
С той же проблемой столкнулся я, не могу взять точный размер экрана для меню, дела в том что Мозилла дает отличаюший размер. Вот пример: Выделить код Код:<html> <body OnLoad="getWidth()"> <Script> function getWidth(){ alert(document.body.clientWidth); } </Script> </body> </html> У меня экран с расширением 1280х1024 IE: 1260 Во время теста браузеры развернуты. Мозилла выдает расширение экрана со скрулом. Может кто то нашел выход с этой ситуации? |
Shutnik > 24-08-2007 19:21:09 |
web |
web > 25-08-2007 16:27:04 |
shutnik пишет
Этого точно не ожидал :-) Дело в том что окно польностью развернуто. Итого он мне должен дать только размер Без Скрула, Как на ИЕ и в Опере. |