OSSANS Project since 2020

「もし四十のおっさんがプログラミングを始めたらどう人生変わるのか」
このブログのメインテーマです
肩肘張らずにユルく、ときたま厳しくやっていきます
※プログラミング以外のことも書きます

JavaScript

【図解あり】JavaScript / 要素の高さや位置の取得まとめ

アイキャッチ画像
JavaScript

JavaScriptで要素の高さ取得する方法ってたくさんないですか?複雑…。

こんなお悩みに答えていきます。

本記事の内容

  • JavaScriptのDOM操作、要素の高さや位置取得に関するまとめ

本記事を対象とする方

  • フロントエンドエンジニアを目指す方
  • Webデザイナー

この記事を書いている僕はプログラミング歴2年5ヶ月です。webエンジニアとして”社内転職”しました。

まずはDOMを理解する

どこかで聞いたことありますかね、DOM。ざっくりでいいので覚えておきましょう。

DOMとは、ドキュメントオブジェクトモデル(Document Objetct Model)のことです。

Webサイトを構築するために使用されるWeb APIなので、プログラミング言語ではありません。主にJavaScriptでDOMにアクセスし、html文書内の構造、スタイル、内容を操作できるようにしています。つまり、DOMがあるおかげでJavaScriptでWebページとその要素にアクセスすることができるのです。詳しくはDOM の紹介 – Web API | MDNをご覧ください。

DOM
※DOMを通してプログラミング言語がWebページの要素にアクセスできる

DOMへのアクセスは、JavaScript以外のプログラミング言語でも可能ですが、今回はJavaScriptでDOMを使用し、要素の高さを取得していきます。DOM操作するのに特別な環境は必要ありません。では次章から順次説明していきます。

clientHeight

clientHeightは要素の高さのうち、paddingのみを含んだ高さを取得します。borderやmarginは含みません。

clientHeight
※水平スクロールバーがある場合、そのバーの高さは含みません

以下例文です。

  1. const div = document.querySelector('div');
  2. console.log(div.clientHeight);

offsetHeight

offsetHeightは要素の高さのうち、paddingとborderを含んだ高さを取得します。marginは含みません。

offsetHeight
※水平スクロールバーがある場合、そのバーの高さも含みます

以下例文です。

  1. const div = document.querySelector('div');
  2. console.log(div.offsetHeight);

scrollHeight

scrollHeightは垂直要素の高さのうち、paddingのみ含んだ高さを取得します。

scrollHeight
※水平スクロールバーがある場合、そのバーの高さは含みません

以下例文です。

  1. const div = document.querySelector('div');
  2. console.log(div.scrollHeight);

window.innerHeight

window.innerHeightは要素の高さのうち、ブラウザのウィンドウの高さのうち、アドレスバー・ブックマークバーを除いた高さを取得します。水平スクロールバーの高さは含みます。

windowinnerHeight
※アドレスバー・ブックマークバーの高さは除きます

以下例文です。

  1. let w_ih = window.innerHeight;
  2. console.log(w_ih);

window.outerHeight

ブラウザのウィンドウの高さのうち、アドレスバー・ブックマークバーを含めた高さを取得します。

windowouterHeight
※アドレスバー・ブックマークバーの高さを含めます

以下例文です。

  1. let w_oh = window.outerHeight;
  2. console.log(w_oh);

getBoundingClientRect()

getBoundingClientRect()は、要素のサイズとビューポートに対する相対位置を取得するためのメソッドで、返値はオブジェクトとなります。いくつかのキー(プロパティ)とバリューが返ってきますが、具体的にはletf、top、right、bottom、x、y、width、heightの値です。相対位置に関しては、ビューポートの左上を起点とした数字が返ってきます。widthとheightには、padding、border-width(つまりborder)が含まれます。

getBoundingClientRect
※指定要素のサイズと相対位置がいっぺんに取得できる便利なメソッドです

以下例文です。ブラウザの左上を起点とした要素の位置を取得するには以下のようにします。

  1. const div = document.querySelector('div');
  2. let div_rect = div.getBoundingClientRect();
  3. console.log(div_rect.top);

スクロールイベントを使用して、要素の相対位置を確認することもできます。

  1. window.addEventListener('scroll', () => {
  2.   console.log(element.getBoundingClientRect().top);
  3. });

window.scrollY

window.scrollYは、ブラウザのウィンドウ(つまりhtml文書)が垂直にスクロールしている量(ピクセル数)を取得する時に使用します。window.pageYOffsetをよく見かける方も多いかと思いますが、window.scrollYと同じなのでどちらを使用しても同じ値が返ってきます。

windowscrollY
※垂直にスクロールしている量が取得できます

以下例文です。getBoundingClientRect()と組み合わせることで、ページトップからの位置が取得できます。

  1. const div = document.querySelector('div');
  2. let div_rect = div.getBoundingClientRect();
  3. console.log(div_rect.top + window.scrollY);
要素の位置とスクロール量を足す
※getBoundingClientRect().topとwindow.scrollYを足すことで、ページに対する要素の位置を取得できます

スクロールイベントを使用すれば、スクロールする度にスクロール量をコンソールに表示することができます。

  1. window.addEventListener('scroll', () => {
  2.   console.log(window.scrollY);
  3. });

今回のまとめ

今回はJavaScriptを使って、要素の高さや位置の取得について紹介しました。最後まで読んで頂きありがとうございました。

最低限、DOMとは何かを理解する

関連記事

  • JavaScript
    ブログアイキャッチ画像
    JavaScript
    2023.03.04(更新)

    【実例コードあり】覚えておきたいパララックスデザインの3つの基本

  • JavaScript
    ブログアイキャッチ画像
    JavaScript

    【ユーザー離脱阻止!】画面遷移アニメーション実装時の注意点

  • JavaScript
    ブログアイキャッチ画像
    JavaScript
    2022.11.19(更新)

    「一瞬でトップへ戻るボタン」を実装する方法【jQuery不要】

  • JavaScript
    ブログアイキャッチ画像
    JavaScript
    2023.02.02(更新)

    【CSSとJavaScriptのみ】ページ内リンクでスムーススクロールさせる方法

  • JavaScript
    ブログアイキャッチ画像
    JavaScript
    2023.02.21(更新)

    【お手軽だった!】画像クリックで拡大画像をポップアップ表示する方法

  • JavaScript
    ブログアイキャッチ画像
    JavaScript
    2022.11.25(更新)

    【5分で完了!】webデザインにおけるスマホファーストビュー高さ設定方法

CATEGORY カテゴリー別最新記事

  • CSS
    アイキャッチ画像
    CSS

    【CSS】margin?position?要素の中央寄せで使うプロパティとは?

  • Docker
    アイキャッチ画像
    Docker
    2022.10.03(更新)

    【簡単設定!】DockerでWordPressをローカル開発する方法

  • HTML
    アイキャッチ画像
    HTML
    2023.02.18(更新)

    【図解あり】aタグの入れ子ルールとHTMLの入れ子ルールを覚える方法

  • JavaScript
    アイキャッチ画像
    JavaScript
    2023.03.04(更新)

    【実例コードあり】覚えておきたいパララックスデザインの3つの基本

  • Python
    アイキャッチ画像
    Python
    2023.02.09(更新)

    【やらなきゃ損!】2日でできるPythonのExcelコピペ自動化!

  • Study
    アイキャッチ画像
    Study
    2023.02.16(更新)

    稼ぐために始めたプログラミングのこれまでの振り返り。勉強方法や役立った本も紹介。

  • web site
    アイキャッチ画像
    web site
    2022.11.26(更新)

    ページ表示速度アップ!npmでソースファイルを軽量化する方法【サクッと簡単!】

  • WordPress
    アイキャッチ画像
    WordPress
    2022.10.26(更新)

    【コピペ可】WordPressサイトをPWA化するためにService Workerを実装してみた。