Варианты document.body.offsetWidth для разных браузеров

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 автоматически

Спасибо :)

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
0
19 096
2

Ответы 2

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

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

http://www.alexandre-gomes.com/?p=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;

}

Я также рекомендую jQuery. Здесь вы можете использовать $ (document) .width () или .height (), а также с параметрами offset (). Left и offset (). Top.

powtac 23.11.2008 19:39

Я отклонился от этих библиотек, потому что их использование мешает вам понять причины их применения таких небольших смещений.

Supernovah 20.10.2016 18:42

Самостоятельно изучать тему - это хорошо, в целом, когда вы обнаруживаете свою службу с конкретным случаем или ошибкой, тем не менее, хорошо то, что с библиотеками с открытым исходным кодом, такими как jquery, поддерживаемыми веб-сообществом и экспертами, участвующими в их разработке. разработка, поддерживаемость кода почти гарантирована, а совместимость с разными (и неизвестными) браузерами на разных устройствах почти идеальна ...

netadictos 05.12.2016 18:57

document.body.offsetWidth returns the innerwidth value from left hand side to the left side of the vertical scrollbar in firefox.

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

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

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

Другие вопросы по теме