document.body.offsetWidth вариации для разных браузеров - PullRequest
2 голосов
/ 23 ноября 2008

document.body.offsetWidth возвращает значение внутренней ширины с левой стороны на левую сторону вертикальной полосы прокрутки в Firefox. В IE это не так, вместо этого он возвращается с левой стороны на правую сторону вертикальной полосы прокрутки. Кто-нибудь знает разумный способ, которым я мог бы сделать верификацию, такую ​​как "var = offsetw;" для offsetw, чтобы быть шириной полосы прокрутки, мне нужно вычесть, чтобы получить firefox как значение document.body.innerWidth? Вот что у меня есть.

if (parseInt(navigator.appVersion)>3) {
    if (navigator.appName=="Netscape") {
        winW = 16;
        winH = 16;
    }
    if (navigator.appName.indexOf("Microsoft")!=-1) {
        winW = 20;
        winH = 20;
    }
    if (navigator.appName.indexOf("Mozilla")!=-1){
        winW = 0;
        winH = 0;
    }
}

В настоящее время Firefox использует значение 16, а не ноль, объявленный строкой Mozilla, что указывает на неправильность.

После добавления или исправления я получаю winW и winH для правильного размера полосы прокрутки для каждого браузера, только если эти браузеры не вычитают полосу прокрутки из document.body.offsetWidth автоматически

Спасибо:)

Ответы [ 2 ]

2 голосов
/ 23 ноября 2008

document.body.offsetWidth возвращает значение внутренней ширины с левой стороны на левую сторону вертикальной полосы прокрутки в Firefox.

Не для меня это не так, он возвращает то же значение, что и IE, Opera, Konqueror и Safari. Пример кода?

Обнаружение браузера с помощью appName очень ненадежно в лучшем случае и в любом случае не покрывает его, поскольку на размер полосы прокрутки больше влияют операционная система и пользовательские настройки, чем браузер.

Вместо этого, если вы хотите прочитать «внутренний размер», используйте clientWidth / clientHeight вместо offsetWidth / offsetHeight или измерьте offsetWidth блока внутри блока с помощью полосы прокрутки.

1 голос
/ 23 ноября 2008

Вы пробовали библиотеку JavaScript? это самый простой способ избавиться от этих проблем. Я рекомендую: jquery или YUI (пользовательский интерфейс Yahoo), где все упаковано в классы, которые делают код совместимым практически для любого браузера.

Помимо этого соображения, на следующих страницах вы можете найти функцию для определения ширины полосы прокрутки (я не проверял):

http://www.alexandre -gomes.com /? Р = 115

http://javascript.jstruebig.de/javascript/70/

Код такой (я не знаю, совместим ли он со всеми браузерами):

function scrollbarWidth() {

    // Scrollbalken im Body ausschalten

    document.body.style.overflow = 'hidden';

    var width = document.body.clientWidth;



    // Scrollbalken

    document.body.style.overflow = 'scroll';



    width -= document.body.clientWidth;



    // Der IE im Standardmode

    if(!width) width = document.body.offsetWidth-document.body.clientWidth;



    // urspr?ngliche Einstellungen

    document.body.style.overflow = '';



    return width;

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...