Re[3]: Из-за различия ширины окон браузеров возникла про
От: Fenrir  
Дата: 01.05.07 17:55
Оценка: 2 (1)
А>Получается такой парадокс: У мозилы document.body.clientWidth изначально развернутого окна отличается от document.body.clientWidth окна которое тоже развернуто, но побывало с момента старта страницы свернутым. Очень странно.

Действительно странно. Особенно насчет терминов свернутое/развернутое окно. Особенно если понимать это, как понимаю я — свернутое значит свернутое на панель задач, а развернутое значит развернутое на полный экран (не F11). Давайте определимся в этом пункте, хорошо?

У меня что document.body.clientWidth, что функция из предыдущего сообщения, выдает идентичное значение для одного окна. То есть если я открываю страницу с window.onresize = function() {alert(document.body.clientWidth);} и уменьшаю окно, выдается 798 (FF). Разворачиваю обратно — 1280. Уменьшаю назад, перегружаю, разворачиваю — 1280. Уменьшаю — 798. В общем, одинаковые цифры. IE при развороте на document.body.clientWidth выдает 1260, Опера — 1274. Опять же, начальное состояние окна роли не играет. На сворачивание в иконку не реагирует ни один браузер (onResize в этом случае не происходит).
Из-за различия ширины окон браузеров возникла проблема.
От: Аноним  
Дата: 28.04.07 19:59
Оценка:
Данный код отлично срабатывает и в Opera и в FireFox. — При разворачивании окна браузера, выводится окошко с текстом 'Окно больше чем"1130"!!'.При сворачивании окна браузера, выводится окошко с текстом 'Окно меньше чем"1130"!!'.Проблема с InternetExploer 6 версии.
При сворачивании окна, он вместо 'Окно меньше чем"1130"!!' выдает 'Окно больше чем"1130"!!'. Есть ли способ сделать корректную проверку для всех трех браузеров?
Вот например, когда я сравнивал clientWidth с числом 1133 (мое разрешение 1152 X 864, cоответственно 1152 — 19(ширина скролинга) = 1133 ) то работало в FireFox корректно, а в Opera нет, потому что у нее помио скрола, который больше на один пиксел чем скролы IE и FF, есть еще и стеночка-каемочка слева. Начал сравнивать clientWidth с числом 1130 — в Опере корректно код начал работать — вернее данныекорректными стали .
Я вот и думаю, может у IE тоже есть подобные особенности? Чило 1130 — я взял методом подгонки — буду благодарен если кто обьяснит точно — почему в опере ширина пространства окна несколько меньше чем у IE и FF — единственное что выяснил так это что скрол больше на один пиксел.




window.onresize = function()
          {
                  if (document.body.clientWidth < 1130)
              {
                  alert('Окно меньше чем"1130"!!');     
              }else 
              {
                  alert('Окно больше чем"1130"!!');
              }
          }
Re: Из-за различия ширины окон браузеров возникла пробле
От: Fenrir  
Дата: 01.05.07 15:24
Оценка:
Что-то до меня не доходит, что ты хочешь получить.

Если реальную ширину клиентской области, то держи функцию (сперто с http://www.tigir.com/javascript.htm):

function getClientWidth()
{
  return document.compatMode == 'CSS1Compat' && !window.opera ? document.documentElement.clientWidth : document.body.clientWidth;
}


Если ответ на вселенское "почему", то он прост как дважды два — НЕЛЬЗЯ полагаться на якобы имеющееся знание о размерах клиентской области в зависимости от разрешения монитора. Даже в той же винде ширина границ окна может поменяться от тем оформления. А в пингвине каком-нить? Я лично не в курсе размеров тамошних границ окна и скролла. И ведь есть еще и разные менеджеры окон! И темы наверняка есть, не могут не быть.
Re[2]: Из-за различия ширины окон браузеров возникла про
От: Аноним  
Дата: 01.05.07 17:09
Оценка:
Здравствуйте, Fenrir, Вы писали... Я еще не успел попробывать подсказанный вами метод — увидел ответ когда уже публиковал сообщение которое вы сейчас читаете .Возможно можно и обойтись и без предложенного выми способа.Т.к.
у меня уже вопрос облегчился, изменился и стал совсем конкретным. Вот:

При полном разворачивании окна у меня срабатывает JavaScript функция, которая считывает параметр document.body.clientWidth и по этому параметру вычислются некоторые значения CSS. Проблема в том, что Мозила при полном разворачивании окна выдает document.body.clientWidth намного меньший чем IE и Опера.
Но если я ставлю JavaScript функцию на onload и изначально запускаю страницу в уже заранее развернутом окне то document.body.clientWidth Мозилла выдает какой положенно — такой же как и IE и Опера.
Получается такой парадокс: У мозилы document.body.clientWidth изначально развернутого окна отличается от document.body.clientWidth окна которое тоже развернуто, но побывало с момента старта страницы свернутым. Очень странно.Код у меня абсолютно правелен, что подтверждается полностью корректной работой страницы в IE и в Opera при любых разрешениях(CSS параметры исходя от ширины тела вычисляются абсолютно правильно).

Вот максимально упрощенная версия кода. Если потребуется выложу полностью. — Но он не очень легко понятен. Поэтому лучше всего будет если вы поймете причину данной проблемы
с помощью уже изложенной мною информации.С уважением Антон.
____________________________________________________________________________________
Код:

<script>
window.onresize = function()
{
if (document.body.clientWidth <= 1024)
{
alert('<= 1024');
}else
{
alert(' >1024');
}
}

</script>
Re[4]: Из-за различия ширины окон браузеров возникла про
От: web_bobby  
Дата: 02.05.07 11:01
Оценка:
Здравствуйте, Fenrir, Вы писали:


1.

Давайте определимся в этом пункте, хорошо?

Я иммею ввиду под свернутым окном не окно свернутое на панель задач, а окно свернутое и видимое в определенных габаритах на рабочем столе.


2.

В общем, одинаковые цифры.

— Написал отдельный тест и одинаковые цифры получились и у меня.
Вопрос в этом случае становится еще более интересным.
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 все ок. ) на чистую воду.
Когда я разворачиваю окно, то срабатывает window.onresize = function() и посредством alert-ов узнаем что:
document.body.clientWidth = 1246;
document.getElementById("X1_f").style.width = 728;
Но ведь эти резульлтаты противоречивы!

Подставим значение document.body.clientWidth = 1246 в формулу:
document.getElementById("X1_f").style.width = document.body.clientWidth — 392

Получается:
document.getElementById("X1_f").style.width = 1246 — 392 = 854;

Значение 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) выводится совершенно пустым(непонятно кстати почему?), но тем не менее
корекктность выполнения кода видна по визуальному отображению элемента с ID -ом X1_f.
Так что глюк возникает только в функции window.onresize = function().


Еще один отдельный ключевой момент.Я написал отдельный тест-код из которого становится кое-что ясно....
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<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() срабатывает без глюка в вычислении
document.getElementById("X1_f").style.width = document.body.clientWidth — 392;
1280 — 392 = 888. Из работы этого тест-код делаем вывод сама по себе эта функция не глючная,а становится таковой только при ее реализации на моей странице.

Но остается не ясным что может повлиять на моей странице на
вычисление document.getElementById("X1_f").style.width = document.body.clientWidth — 392; ??!!
Но если и влияет что-то, то почему это влияние не сказывается на вычисление
document.getElementById("X1_f").style.width = document.body.clientWidth — 392; в индеетичной по составу функции
function onLoadCheckWidth(), котороя также размещена на мой странице??!
Re[5]: Из-за различия ширины окон браузеров возникла про
От: Аноним  
Дата: 02.05.07 12:16
Оценка:
Проблема решена: нужно дописывать 'px' тогда и Мозилла понимает код
document.body.clientWidth — 392 + 'px';
Re[6]: Из-за различия ширины окон браузеров возникла про
От: Аноним  
Дата: 02.05.07 12:52
Оценка:
Теперь IE тупит — верннее и до того как дописал 'px' он тоже так тупил. Почему IE при уменьшении разрешения монитора(до 1024*768) выбирает в следующем коде else и соответственно выводит второй аlert со значением 1264? Опера и Мозилла правильно отслеживают — что разрешение уменьшилось.Почему же IE не понимает этого?
Не может быть что для него разрешение существует скажем как 1025*768.
Даже если б это было так то alert( document.body.clientWidth ) вывел бы 1025 а не 1264.
Ничего не понимаю!

window.onresize = function()
    {
        if (document.body.clientWidth <= 1024)
        {
            alert('<= 1024');     
        }else
        {
            alert(' >1024');   
            alert(  document.body.clientWidth  );
        }
    }
Re[7]: Из-за различия ширины окон браузеров возникла про
От: web_bobby  
Дата: 02.05.07 21:26
Оценка:
Видимо тоже что такое,
какой — нибудь доктайп надо или что там дописать-прописать... Наверняка какая нибудь мелочь, которую просто так вот не заметишь....

И сам по себе этот мини-тест в IE тоже правильно понимает уменьшение размера тела..
Но на странице уже нет.
window.onresize = function()
{
if (document.body.clientWidth <= 1024)
{
alert('<= 1024');
}else
{
alert(' >1024');
alert( document.body.clientWidth );
}
}

— в случае когда надо было дописать 'px' мини-тест с тем же кодом работал корекктно, а вот уже поставленный на мою страницу нет. Видимо когда инфы много обрабатывается вылазят все косяки.
Re[8]: Из-за различия ширины окон браузеров возникла про
От: web_bobby  
Дата: 04.05.07 08:48
Оценка:
up
Re[9]: Из-за различия ширины окон браузеров возникла про
От: Fenrir  
Дата: 16.05.07 12:56
Оценка:
Выложи куда-нибудь проблемную страницу целиком и дай ссылку.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.