2012-12-29 31 views
0

FIDDLE获取宽度得到滚动条

所以,我一直在试图让一个很好的jQuery的方式找到客户的滚动条的宽度。我想我已经在我的小提琴中找到了它,但显然增加了一个滚动条并没有改变孩子宽度的任何东西。即使在开发工具(chrome,FF)中,宽度也有所下降。

function scrollbarWidth() { 
    var div = $('<div class="outer"><div class="inner"></div>'); 
    $('body').append(div); 

    var w1 = $(".inner").width(); 
    $(".test-text span:first").text(w1); 
    console.log(w1); 

    $(".test-div").css('overflow-y', 'scroll'); 
    var w2 = $(".inner").width(); 
    $(".test-text span:last").text(w2); 

    console.log(w2); 
} 

scrollbarWidth();​ 

使用innerWidth没有什么区别。

这是怎么可能的,什么是解决方案?

+0

看起来你正在试图做的[**这**](http://jsfiddle.net/adeneo/j9SkE/2/) – adeneo

+0

是的,但只jQuery,而不是纯JS。 –

+0

为什么你更喜欢纯js的jQuery? – adeneo

回答

0

这里有一个函数来获取滚动条的宽度:

function getScrollBarWidth() { 
    var inner = $('<p />', {style:'width:100%;height:200px;'}), 
     outer = $('<div />', {style:'position:absolute;top:0;left:0;visibility:hidden;width:200px;height:150px;overflow:hidden;'}); 

    outer.append(inner).appendTo($('body')); 

    var w1 = inner.get(0).offsetWidth; 
    outer.css('overflow', 'scroll'); 
    var w2 = inner.get(0).offsetWidth; 
    if (w1 == w2) w2 = outer.get(0).clientWidth; 

    outer.remove(); 
    return (w1 - w2); 
} 

FIDDLE

get()功能获取本地JavaScript DOM元素,这是需要为offsetWidth是一个本地JavaScript方法,并不适用于jQuery“元素”。它也已被写入:

var w1 = inner[0].offsetWidth; 
+0

再次感谢,希望你早日康复!干杯。哦,你可能想把你的Fiddle(http://jsfiddle.net/adeneo/j9SkE/3/)添加到这个答案中,作为一个简单的例子! :) –