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 автоматически
Спасибо :)



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы пробовали библиотеку 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.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 блока внутри блока с полосой прокрутки.
Я также рекомендую jQuery. Здесь вы можете использовать $ (document) .width () или .height (), а также с параметрами offset (). Left и offset (). Top.