2012-12-29 65 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/)添加到這個答案中,作爲一個簡單的例子! :) –