0

小提琴

所以,我一直在尝试找到一种好的 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并没有什么不同。

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

4

1 回答 1

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);
}

小提琴

get()函数获取本机 javascript DOM 元素,这是offsetWidth本机 javascript 方法所必需的,并且不适用于 jQuery“元素”。它也可以写成:

var w1 = inner[0].offsetWidth;
于 2013-01-08T16:02:41.420 回答