0

フィドル

そのため、クライアントのスクロールバーの幅を見つけるための適切な jQuery の方法を取得しようとしています。私はフィドルでそれを理解したと思っていましたが、スクロールバーを追加しても子供の幅は何も変わらないようです。開発ツール(クロム、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 メソッドとして必要なネイティブ JavaScript DOM 要素を取得しますが、offsetWidthjQuery の「要素」では機能しません。次のように書くこともできます。

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