[解決済み] JavaScriptでスクロールバーの幅を取得する [重複]。
2022-05-09 07:44:56
質問
以下のHTMLは、div.containerの右内側の端にスクロールバーを表示するものです。
そのスクロールバーの幅を決定することは可能でしょうか?
<div class="container" style="overflow-y:auto; height:40px;">
<div class="somethingBig"></div>
</div>
解決方法は?
この関数でスクロールバーの幅を指定することができます。
function getScrollbarWidth() {
// Creating invisible container
const outer = document.createElement('div');
outer.style.visibility = 'hidden';
outer.style.overflow = 'scroll'; // forcing scrollbar to appear
outer.style.msOverflowStyle = 'scrollbar'; // needed for WinJS apps
document.body.appendChild(outer);
// Creating inner element and placing it in the container
const inner = document.createElement('div');
outer.appendChild(inner);
// Calculating difference between container's full width and the child width
const scrollbarWidth = (outer.offsetWidth - inner.offsetWidth);
// Removing temporary elements from the DOM
outer.parentNode.removeChild(outer);
return scrollbarWidth;
}
ここでの基本的な手順は
- hidden div(外側)を作成し、そのオフセット幅を取得する。
- CSSのoverflowプロパティを使ってdiv(outer)にスクロールバーを強制的に表示させる
- 新しい div (inner) を作成して outer に追加し、その幅を '100%' に設定してオフセット幅を取得します。
- 集めたオフセットからスクロールバーの幅を計算する
動作例はこちら。 http://jsfiddle.net/slavafomin/tsrmgcu9/
更新情報
Windows (metro)アプリで使用する場合は、必ず
-MS-overflow-style
プロパティに設定します。
scrollbar
そうでない場合は、幅が正しく検出されません。(コード更新)
アップデートその2 Mac OS でデフォルトの "Only show scrollbars when scrolling" 設定がある場合(Yosemite 以降)、この設定は動作しません。
関連
-
[解決済み】React - uncaught TypeError: 未定義のプロパティ 'setState' を読み取れない
-
nullのプロパティinnerHTMLを読み取れません エラーメッセージ
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] JavaScriptで文字列が部分文字列を含むかどうかを確認する方法は?
-
[解決済み] あるJavaScriptファイルを他のJavaScriptファイルにインクルードするにはどうすればよいですか?
-
[解決済み] JavaScriptでメールアドレスを検証するのに最適な方法は何ですか?
-
[解決済み] JavaScriptでタイムスタンプを取得する方法は?
-
[解決済み】JavaScriptの比較では、どちらの等号演算子(== vs ===)を使うべきですか?
-
[解決済み】JavaScriptで文字列の出現箇所をすべて置換する方法
-
[解決済み】オブジェクトからプロパティを削除する(JavaScript)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
vueネットワークリクエストソリューション ネイティブネットワークリクエストとjsネットワークリクエストライブラリ
-
vue3.0プロジェクトのアーキテクチャを構築するための便利なツール
-
jQueryのコピーオブジェクトの説明
-
[解決済み】ローカルファイルを開くことができません - Chrome: ローカルリソースの読み込みが許可されていない
-
[解決済み】Node.js Error: Cannot find module express
-
[解決済み】 `string.split is not a function` というエラーの原因は何ですか?
-
[解決済み】React Uncaught Error: 対象コンテナが DOM 要素でない [重複]。
-
nullのプロパティinnerHTMLを読み取れません エラーメッセージ
-
[解決済み】スクロールを非表示にせずに無効にする方法は?
-
[解決済み] ブラウザのスクロールバーサイズを取得するにはどうすればよいですか?