Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Как проверить, есть ли скроллбар (https://javascript.ru/forum/events/16714-kak-proverit-est-li-skrollbar.html)

shaltay 19.04.2011 04:24

Как проверить, есть ли скроллбар
 
Доброго времени, товарищи.
Такая проблема, для меня не тривиальная:
нужно проверить, появился ли скроллбар на сайте. Если есть полоса прокрутки, то надо выполнить определенное действие. Может быть, можно так: если ширина страницы больше 100%, то выполнить действие?
Нужно зафиксировать контент в браузере чтобы он не сдвигался в сторону при появлении полосы прокрутки. Может, есть другие решения?

в общем, грубо говоря человеческим языком, должно выглядеть так:
if('scrollbar' == true){
'do something';
}

ksa 19.04.2011 09:13

shaltay, может таки вёрстку нормальную сделать?

shaltay 19.04.2011 11:42

Да вот не могу я найти решения в верстке. Ни один форум пока не помог. Если сайт центрирован, то центр разный с прокруткой и без.
И все-таки, можно как-то детерминировать скроллбар?

Kolyaj 19.04.2011 11:44

Цитата:

Сообщение от shaltay
Может, есть другие решения?

Сделать, чтобы скролбар был всегда.

shaltay 19.04.2011 12:09

Цитата:

Сообщение от Kolyaj (Сообщение 101346)
Сделать, чтобы скролбар был всегда.

Не хочу. Когда он пустой, как-то не красиво выглядит. Я думал, что никак нельзя сделать, пока не обратил внимание на прокрутку vkontakte.ru. Она там здорово сделана. ничего никуда не едет, она появляется и исчезает почти незаметно для глаз. И даже пропадает, когда открываются мелкие окошки поверх основной страницы. типа создания списков и тд.

shaltay 19.04.2011 12:17

Нашел в коде вконтакте вот такую штуку:
<body onresize="onBodyResize()" class="is_rtl">

Что бы это могло значить?

Matre 19.04.2011 12:35

if (document.body.scrollWidth > document.body.offsetWidth) ...;

shaltay 19.04.2011 17:09

Цитата:

Сообщение от Matre (Сообщение 101358)
if (document.body.scrollWidth > document.body.offsetWidth) ...;

Сделал:
if (document.body.scrollWidth > document.body.offsetWidth){
alert('yo!!!');
}


ничего не произошло. Прокрутка есть.. Так же пробовал со scrollHeight.

goldserg 19.04.2011 18:04

Сталкивался с проблемой.

Для большинства браузеров делается скролинг (пусть пустой будет)
Для оперы.
if (opera) {
if (document.body.scrollHeight > window.innerHeight && (!document.body.style.paddingRight || document.body.style.paddingRight == scrollWidth+"px"))
document.body.style.paddingRight = "0px";
if (document.body.scrollHeight < window.innerHeight)
document.body.style.paddingRight = this.scrollWidth+"px";
}

что-то типа этого вешается на onresize

shaltay 20.04.2011 14:56

неужели нет кроссбраузерного решения?

рони 20.04.2011 16:14

shaltay,
Вариант кроссбраузерного определения скролбаров на странице ...
<!DOCTYPE html>
<html>
<head>
  <title></title>
<style type="text/css">
body{
  height: 1000px;
  width: 1500px;
}
</style>
</head>
<body>
<script  type="text/javascript">
function get_scroll(a) {
   var d = document,
        b = d.body,
        e = d.documentElement,
        c = "client" + a;
        a = "scroll" + a;
    return /CSS/.test(d.compatMode)? (e[c]< e[a]) : (b[c]< b[a])
};
</script>
<input type="button"  value="go"  onclick="alert('Горизонтальный скроллбар = '+get_scroll('Width')+'\nВертикальный скроллбар = '+get_scroll('Height'))"/>
</body>
</html>

shaltay 26.04.2011 16:53

Цитата:

Сообщение от рони (Сообщение 101552)
shaltay,
Вариант кроссбраузерного определения скролбаров на странице ...

Огромное спасибо! Именно то, что мне нужно!

mesign 11.05.2014 08:25

На само деле все очень просто, не нужно отслеживать появления скрола, нужно задать левое поле не через CSS, а через JS, поделив пополам остаток от ширины экрана за минусом блока с контентом. А правое поле оставить width: auto;

mesign 11.05.2014 10:53

т.е. после прогрузки сраницы делаем $('body').css('display','none'); и записываем ширину окна, соответственно оно будет без скролла, а потом возвращаем все на место и снова замеряем, разница будет шириной скрола если она вообще будет. и для каждого браузера определится точно.


Часовой пояс GMT +3, время: 16:27.