[解決済み] JavaScriptのコードでブラウザの幅を取得するには?
2022-04-22 09:22:04
質問
現在のブラウザの幅を取得するJavaScript関数を書こうとしています。
こんなのがありました。
console.log(document.body.offsetWidth);
しかし、bodyの幅が100%の場合、失敗してしまうという問題があります。
他に良い機能、または回避策はないでしょうか?
解決方法は?
2017年版アップデート
私のオリジナルの回答は2009年に書かれたものです。今でも有効ですが、2017年に向けて更新したいと思います。ブラウザはまだ異なる挙動をすることがあります。私は、jQueryチームがクロスブラウザの一貫性を維持するために素晴らしい仕事をしていることを信頼しています。しかし、ライブラリ全体を含める必要はありません。jQueryのソースでは、関連する部分が dimensions.js の 37 行目 . ここでは、これを抽出し、単体で動作するように修正します。
function getWidth() {
return Math.max(
document.body.scrollWidth,
document.documentElement.scrollWidth,
document.body.offsetWidth,
document.documentElement.offsetWidth,
document.documentElement.clientWidth
);
}
function getHeight() {
return Math.max(
document.body.scrollHeight,
document.documentElement.scrollHeight,
document.body.offsetHeight,
document.documentElement.offsetHeight,
document.documentElement.clientHeight
);
}
console.log('Width: ' + getWidth() );
console.log('Height: ' + getHeight() );
オリジナル回答
ブラウザによって動作が異なるため、まず値をテストし、正しい値を使用する必要があります。これを行う関数を以下に示します。
function getWidth() {
if (self.innerWidth) {
return self.innerWidth;
}
if (document.documentElement && document.documentElement.clientWidth) {
return document.documentElement.clientWidth;
}
if (document.body) {
return document.body.clientWidth;
}
}
であり、高さについても同様です。
function getHeight() {
if (self.innerHeight) {
return self.innerHeight;
}
if (document.documentElement && document.documentElement.clientHeight) {
return document.documentElement.clientHeight;
}
if (document.body) {
return document.body.clientHeight;
}
}
この2つをスクリプトで呼び出すには
getWidth()
または
getHeight()
. ブラウザのネイティブプロパティが何も定義されていない場合、以下のようになります。
undefined
.
関連
-
JSクロスドメインソリューション リアクト構成 リバースプロキシ
-
fetch ネットワークリクエストラッパーの説明例
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] JavaScriptで文字列が部分文字列を含むかどうかを確認する方法は?
-
[解決済み] あるJavaScriptファイルを他のJavaScriptファイルにインクルードするにはどうすればよいですか?
-
[解決済み] JavaScriptでタイムスタンプを取得する方法は?
-
[解決済み] CSSの親セレクタはありますか?
-
[解決済み] event.preventDefault() vs. return false
-
[解決済み] HTML5のlocalStorageにオブジェクトを格納する方法は?
-
[解決済み] 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 実装 サイバーパンク風ボタン
おすすめ
-
JSクロスドメインソリューション リアクト構成 リバースプロキシ
-
fetch ネットワークリクエストラッパーの説明例
-
Vueにシンプルなメモ帳機能を実装
-
vue+webrtc(Tencent cloud)ライブ機能の実践を実現するために
-
vueにおけるv-forループオブジェクトのプロパティ
-
Vueのフィルタの説明
-
[解決済み】TypeError: Router.use() はミドルウェアの関数を要求しているが、Object を取得した。
-
[解決済み】JavaScript TypeError: null のプロパティ 'style' を読み取ることができない
-
[解決済み】ReactJSでエラー発生 Uncaught TypeError: Super expression は null か関数でなければならず、undefined ではありません。
-
モジュールのビルドに失敗しました。Error: ENOENT: no such file or directory, scandir 'D:\.... \node_modules