かもメモ

自分の落ちた落とし穴に何度も落ちる人のメモ帳

javascript jQuery スクロールバーの幅を含むウィンドウサイズを取得したい。

.width()で取得できる。

var width = $(window).width();

$(window).width();で取得できる値は表示されているエリアのサイズになります。
Y方向にスクロールがあるページの時、これで取れるwidthにはスクロールバーの幅は含まれないっぽいです。

レスポンシブなサイトなどで、サイズに合わせて$(window).on('resize')などで処理を行う時にスクロールバーの幅を含む/含まないでCSS3のMedia Queries(メディアクエリ)で指定しているwidthとjavascriptの処理がズレてしまう場合があります。

スクロールバーの幅も含んだウィンドウサイズを取得
(ブラウザとバージョンによって微妙に異なるかも知れません...

var width = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth

window.innerWidthはスクロールバーの幅も含んだ値が取れるっぽいです。
このプロパティが無いブラウザの時はdocument.documentElement.clientWidth又はdocument.body.clientWidthを使いますが、この値は$(window).width()と同じでスクロールエリアの幅を含まないっぽいです。 ※ google Chromeで確認しました。

JavaScriptリファレンス - 画面操作 window.innerWidth
JavaScriptリファレンス - 画面操作 document.body.clientWidth


追記:
スクロールバーの幅を含むと書きたい所をスクロールエリアと書いてしまっていました。 かなり意味が変わってきますよね、、、

スクロールバーの幅ではなくX方向のスクロールで隠されている領域をwidthを取得するには

var sW = document.body.scrollWidth || document.documentElement.scrollWidth;

とするのが良さそうです。

取得できる値をチェックしてみました。


TVアニメ/データカードダス アイカツ! 2ndシーズンベストアルバム SHINING STAR*

TVアニメ/データカードダス アイカツ! 2ndシーズンベストアルバム SHINING STAR*