2011-09-21 275 views
6

有没有一种简单的方法来获得使用JavaScript/jQuery的滚动条的宽度? 我需要得到溢出的div的宽度+滚动条的宽度。div滚动条宽度

谢谢

回答

12

,如果你使用jQuery,试试这个:

function getScrollbarWidth() 
{ 
    var div = $('<div style="width:50px;height:50px;overflow:hidden;position:absolute;top:-200px;left:-200px;"><div style="height:100px;"></div></div>'); 
    $('body').append(div); 
    var w1 = $('div', div).innerWidth(); 
    div.css('overflow-y', 'auto'); 
    var w2 = $('div', div).innerWidth(); 
    $(div).remove(); 
    return (w1 - w2); 
} 

我使用这个项目我的工作,它就像一个魅力。它通过获取滚动条宽度:

  1. 追加一个div溢出内容的主体(在非可视区域,-200px顶部/左)
  2. 集溢出hidden
  3. 得到宽度
  4. 集溢流到auto(以获得滚动条)
  5. 得到宽度
  6. 两者。减去宽度以得到滚动条的宽度

所以你要做的就是让你的div($('#mydiv').width())的宽度并添加滚动条宽度什么:

var completewidth = $('#mydiv').width() + getScrollbarWidth(); 
+0

可悲的是不与MacOS的狮子的工作滚动条... – jedierikb

0

这是一个普通的JavaScript版本是这样更快。

function getScrollbarWidth() { 
    var div, body, W = window.browserScrollbarWidth; 
    if (W === undefined) { 
    body = document.body, div = document.createElement('div'); 
    div.innerHTML = '<div style="width: 50px; height: 50px; position: absolute; left: -100px; top: -100px; overflow: auto;"><div style="width: 1px; height: 100px;"></div></div>'; 
    div = div.firstChild; 
    body.appendChild(div); 
    W = window.browserScrollbarWidth = div.offsetWidth - div.clientWidth; 
    body.removeChild(div); 
    } 
    return W; 
}; 
2

设置一个div的溢出“scroll”自动添加scrollbars(即使没有什么的里面,scrollbars会在那里,但灰色)。因此,只要一格,找到宽度,设置溢出滚动,并找到新的宽度,并返回的区别:

function getScrollBarWidth() { 
    var helper = document.createElement('div'); 
    helper.style = "width: 100px; height: 100px; overflow:hidden;" 
    document.body.appendChild(helper); 
    var bigger = helper.clientWidth; 
    helper.style.overflow = "scroll"; 
    var smaller = helper.clientWidth; 
    document.body.removeChild(helper); 
    return(bigger - smaller); 
} 
+0

出于好奇,这是否适用于mac上最新版本的Safari浏览器,滚动条仅在悬停时出现?我只问,因为我最近花了很多时间试图在放弃之前尝试查找滚动条的宽度,并宣布Mac Safari上的三个用户可以处理5或6像素跳跃。我只是试图检查自己,但发现safari的windows版本似乎没有表现出相同的行为。编辑:这是因为它不是Safari,但狮子这样做。我猜这些解决方案可能不适用于Lion。 –

3

试试这个

$("#myDiv")[0].scrollWidth