JS 要素の位置・サイズ・スクロール量を取得する方法

JS 要素サイズを取得する Java Script
スポンサーリンク

今回は、「要素の様々な情報を取得する方法」についてご紹介させて頂きます。

CSSの学習時にもサイズの考え方については学習していると思いますので、それほど難しくはないと思います。

要素サイズの概念は非常に重要ですので、ぜひしっかりとマスターしていきましょう。

スポンサーリンク

offset*

offsetParent

offsetParent」プロパティは、「offsetTop」、「offsetLeft」プロパティの基準となる要素のことを指します。

「Parent」と付いていますので、親要素のことであるように感じますが、今まで見てきたような親要素のことではありません。

HTML

    <section id="sector2">
      <h2>動物</h2>
      <ul id="animals">
        <li id="dog">犬</li>
        <li id="cat">猫</li>
        <li id="bird">鳥</li>
        <li id="panda">パンダ</li>
      </ul>
      <div class="sample newsample"></div>
    </section>
let newCat = document.getElementById('cat');
console.log(newCat.parentNode);

<ul id="animals">
</ul>
console.log(newCat.offsetParent);

<body>
</body>

コンソールの表示は一部省略していますが、表示内容が違います。

ここでは「body」が返されています。

「offsetParent」を使用した時は、以下の条件に合う最も近い要素を返します。

  • position : relataive、または「absolute」、または「fixed」が指定されている要素
  • テーブルの場合は、「<td>、<th>、<table>」
  • <body>
CSS

#animals {
  position: relative;
  background-color: bisque;
  width: 200px;
  border: 2px solid black;
}

ここでCSSに「position: relative」を指定すると、先程の結果は以下のようになります。

console.log(newCat.offsetParent);

<ul id="animals"></ul>

offsetTop / Left

offsetTop」は、オフセット(座標)の高さ、「offsetLeft」はオフセットの横幅を取得します。

HTML

    <section id="sector3">
      <article id="art">
        <p id="offset">
          Lorem ipsum, dolor sit amet consectetur adipisicing elit. Consequatur
          itaque facilis accusamus! Voluptatibus harum, commodi culpa numquam
          eaque necessitatibus veritatis libero totam dicta reiciendis nostrum
          fuga sed beatae placeat cum?
        </p>
      </article>
    </section>
CSS

#sector3 {
  position: relative;
}

#offset {
  position: absolute;
  top: 100px;
  left: 100px;
  border: 20px solid greenyellow;
  margin: 0;
}
console.log(offset.offsetTop);
console.log(offset.offsetLeft);
console.log(offset.offsetParent.id);

 100
 100
 sector3
offsetTopとoffsetLeftの解説

offsetWidth / Height

offsetWidth」は要素自身の横幅、「offsetHeight」は要素自身の高さを取得します。

console.log(offset.offsetWidth);
console.log(offset.offsetHeight);

600
136
offsetWidthとoffsetHeightの結果を表示

「offsetWidth」は600pxになっています。

これは、「body」に「width:700px」と指定しているためで、左側に先程指定した、100pxのスペースがあります。

border、paddingは含みますが、marginは含みません。

client*

clientTop / Left

clientTop」は上部のボーダー幅、「clientLeft」は左側のボーダー幅です。

なお、まずありませんが、左側にスクロールバーが表示されている場合は、その幅も含みます。

console.log(offset.clientTop);
console.log(offset.clientLeft);

20
20

clientWidth / Height

clientWidth」は、ボーダー、スクロールバーを含まない横幅です。

clientHeight」は、ボーダー、スクロールバーを含まない高さです。

console.log(offset.clientWidth);
console.log(offset.clientHeight);

560
96

scroll*

scrollTop / Height

「scrollTop」は、要素内の縦方向のスクロール量を取得します。

HTML
        <button onclick="count()">チェック・スクロール</button>
        <div id="check"></div>
function count() {
  let newOffset = document.getElementById('offset');
  let scroll = newOffset.scrollTop;
  document.getElementById('check').innerHTML = scroll;
}
scrollTopでスクロール量を取得します

スクロールした場所で、「チェック・スクロール」をクリックすると、スクロール量(ピクセル)が表示されます。

ここでは、count関数でスクロールをカウントしましたが、set関数を使って数値を指定することも出来ます。(クリックすると、指定した位置に移動させる等)

let widthOffset = document.getElementById('offset');
console.log(widthOffset.scrollHeight);

312

scrollHeight」はスクロールの隠れた部分も含めたサイズを取得します。

scrollLeft / Width

「scrollLeft」は、要素内の横方向のスクロール量を取得します。

CSS

#offset {
  position: absolute;
  top: 100px;
  left: 100px;
  border: 20px solid greenyellow;
  margin: 0;
  width: 200px;
  height: 100px;
  overflow-x: scroll;
  white-space: nowrap;
}
function count() {
  let newOffset = document.getElementById('offset');
  let scroll = newOffset.scrollLeft;
  document.getElementById('check').innerHTML = scroll;
}
scrollLeftでスクロール量を取得します

スクロールした場所で、「チェック・スクロール」をクリックすると、スクロール量(ピクセル)が表示されます。

let widthOffset = document.getElementById('offset');
console.log(widthOffset.scrollWidth);

1881

scrollWidth」は隠れた部分も含めたサイズを取得します。

スポンサーリンク

あとがき

いかがでしたか。

「offsetParent」の概念は少し分かりにくいかもしれませんが、「Parent」の意味を理解しておけば問題ないと思います。

今回も最後までお読み頂きありがとうございました。

タイトルとURLをコピーしました