Мне просто нужен простой JQ / JS, чтобы проверить, есть ли у текущей страницы / окна (а не конкретного элемента) вертикальную полосу прокрутки.
Поиск в Google дает мне вещи, которые кажутся слишком сложными только для этой базовой функции.
Как это может быть сделано?
javascript
jquery
scroll
лесистый
источник
источник
overflow
свойствоbody
установленоhidden
где-то в строке, это не сработает. Однако скрытая установка на корпусе встречается крайне редко.$(document)
вместо этого$("body")
, это сработало для меня, когда body не было (у меня абсолютный позиционированный контейнер с соотношением сторон по ширине / высоте)попробуй это:
Это только скажет вам, если вертикальный scrollHeight больше, чем высота просматриваемого контента.
hasVScroll
Переменная будет содержать истинное или ложное.Если вам нужно выполнить более тщательную проверку, добавьте в приведенный выше код следующее:
источник
cStyle.overflow === 'scroll'
?cStyle.overflow == "visible"
может отображать полосы прокрутки, когда элементом являетсяdocument.body
. Но должно быть (hasVScroll && cStyle.overflow == "visible" && element.nodeName == "BODY"). Кроме того, это необходимо проверить,cStyle.overflow === 'scroll'
как вы указываете.Я попробовал предыдущий ответ и, похоже, не работает с $ ("body"). Height () не обязательно представляет всю высоту html.
Я исправил решение следующим образом:
источник
Давайте вернем этот вопрос из мертвых;) Есть причина, по которой Google не дает вам простого решения. Особые случаи и особенности браузера влияют на расчет, и это не так тривиально, как кажется.
К сожалению, пока есть проблемы с решениями, изложенными здесь. Я вовсе не хочу их принижать - они являются отличной отправной точкой и затрагивают все ключевые свойства, необходимые для более надежного подхода. Но я бы не рекомендовал копировать и вставлять код из любого другого ответа, потому что
$( document ).width()
и.height()
становятся жертвой ошибочного определения размера документа jQuery .window.innerWidth
, если браузер поддерживает это, ваш код не сможет обнаруживать полосы прокрутки в мобильных браузерах, где ширина полосы прокрутки обычно равна 0. Они просто временно отображаются как наложение и не занимают места в документе. , Масштабирование на мобильных устройствах также становится проблемой (долгая история).html
иbody
элемент значений не по умолчанию (то , что происходит потом немного Приглашена - см это описание ).Я потратил больше времени, чем мог бы себе представить, на поиск решения, которое «просто работает» (кашель). Алгоритм я придумал теперь является частью плагина, jQuery.isInView , который выставляет на
.hasScrollbar
метод . Если хотите, посмотрите исходник .В сценарии, когда вы полностью контролируете страницу и не имеете дело с неизвестным CSS, использование плагина может быть излишним - в конце концов, вы знаете, какие крайние случаи применяются, а какие нет. Однако, если вам нужны надежные результаты в неизвестной среде, я не думаю, что описанных здесь решений будет достаточно. Лучше использовать проверенный плагин - мой или любой другой.
источник
window.scrollbars
объект , который имеет одно свойство,visible
. Звучит многообещающе, но это не так. Он не поддерживается в IE, включая IE11. И это просто говорит вам , что есть полоса прокрутки - но не один , который. См. Тестовую страницу здесь .Это сработало для меня:
Для тела просто используйте
hasVerticalScroll()
.источник
clientHeight
здесь предпочтительнееoffsetHeight
. В противном случае у вас может быть толстая граница и возврат, что нет полосы прокрутки, когда есть.источник
Как ни странно, ни одно из этих решений не сообщает вам, есть ли на странице вертикальная полоса прокрутки.
window.innerWidth - document.body.clientWidth
даст вам ширину полосы прокрутки. Это должно работать в любом IE9 + (не тестировалось в меньших браузерах). (Или, чтобы строго ответить на вопрос,!!(window.innerWidth - document.body.clientWidth)
Зачем? Допустим, у вас есть страница, содержимое которой выше, чем высота окна, и пользователь может прокручивать вверх / вниз. Если вы используете Chrome на Mac без подключенной мыши, пользователь не увидит полосу прокрутки. Подключите мышь, и появится полоса прокрутки. (Обратите внимание, что это поведение можно переопределить, но это AFAIK по умолчанию).
источник
Я нашел ванильный раствор
источник
window.innerWidth > document.documentElement.clientWidth
это правда, ноwindow.innerHeight > document.documentElement.clientHeight
нет. Похоже, что в данном случае все было наоборот. Я не JS-разработчик, мне он нужен только для тестов Selenium. Благодарен за подсказки.Он скажет вам, есть ли у вас полоса прокрутки или нет. Я включил некоторую информацию, которая может помочь в отладке, которая будет отображаться как предупреждение JavaScript.
Поместите это в тег скрипта после закрывающего тега тела.
источник
Я написал обновленную версию ответа Киса К. Баккера:
Функция возвращает true или false в зависимости от того, есть ли на странице вертикальная полоса прокрутки или нет.
Например:
источник
я использую
источник
Просто сравните ширину корневого элемента документа (т.е. элемента html) с внутренней частью окна:
Если вам также нужно знать ширину полосы прокрутки:
источник
Другие решения не работали в одном из моих проектов, и я закончил проверку свойства переполнения css
но он будет работать только в том случае, если появится полоса прокрутки, исчезнет, изменив опору, она не будет работать, если содержимое равно или меньше окна.
источник