Ответ 1
Это легко измерить. На прокручиваемом элементе толщина полосы прокрутки проста:
var scrollbarWidth = scrollableEl.offsetWidth - scrollableEl.clientWidth;`
Как объяснил очень хорошо Дэвид Уолш. Ширина/высота полосы прокрутки равна нулю:
-
OSX (если только настройки мыши не были изменены, или перед Lion).
-
сенсорные устройства браузеров (Android, iOS, Windows Phone).
-
IE12 Edge в режиме планшета (динамически изменчивый, полосы прокрутки показывают и скрывают и перерисовывают страницы при изменении режима Tablet. Я думаю, что это изменение можно обнаружить, зарегистрировавшись для события изменения размера и проверки ширины полосы прокрутки).
-
Может быть изменен с помощью CSS, например.
::-webkit-scrollbar { width: 1em; }
-ms-overflow-style: none
(документация). -
Может быть ноль, если элемент еще не в документе (возможно, если script работает в
<head>
?).
Другие примечания:
-
У Modernizr есть обнаружение функции hiddenscrollbar, которая определяет, используются ли полосы прокрутки нулевой ширины.
-
Разница в высоте должна также измерять это, но она не была надежной в IE8 (особенно ненадежной после события изменения размера из-за изменения масштаба), поэтому я всегда использовал разницу в ширине.
-
Если ширина не равна нулю, она также может меняться из-за: (1) изменения масштаба страницы (ширина остается такой же, как и физические пиксели на некоторых браузерах, поэтому логические пиксели меняются. Несмотря на то, что пинч-зум действует по-разному), (2) Изменения стиля, такие как
-webkit-scrollbar
, (3) Изменения темы рабочего стола (ширина отличается от основных тем или персонализированных тем).
Вот несколько ссылок на тестеры:
-
Простой простой код JavaScript (возможно, лучше сделать div постоянным, чтобы избежать вычислений).
-
Modernizr cow test, который AFAIK дает hiddenscrollbar как true, если ширина полосы прокрутки равна нулю (также см. cssscrollbar).
-
Некоторый уродливый код jQuery