![見出し画像](https://assets.st-note.com/production/uploads/images/132557296/rectangle_large_type_2_435ffa534b9f3a73ad51f3edcd8b583b.png?width=1200)
【JavaScript】getBoundingClientRect()って、なに?🤔
getBoundingClientRect()って、なに?🤔
`getBoundingClientRect()`は、JavaScriptで使用されるDOM要素のメソッドの一つです。このメソッドは、要素のサイズとビューポートに対する位置を取得するために用いられます。具体的には、要素の幅、高さ、およびビューポート(ブラウザの表示領域)の左上角を基点とした要素の位置(上、右、下、左)を含むDOMRectオブジェクトを返します。
`getBoundingClientRect()`によって返される値は、ピクセル単位で、要素のレイアウトが完了した状態(CSSの変形などを含む)を基に計算されます。これにより、要素の正確な表示位置やサイズをプログラムから容易に取得でき、マウスイベントの処理、要素の配置調整、可視範囲内での要素の検出など、さまざまな用途に利用可能です。
使用例
<div id="myElement" style="width: 100px; height: 50px;">テスト要素</div>
var element = document.getElementById('myElement');
var rect = element.getBoundingClientRect();
console.log('要素の幅:', rect.width);
console.log('要素の高さ:', rect.height);
console.log('要素の上端からの距離:', rect.top);
console.log('要素の左端からの距離:', rect.left);
console.log('要素の下端からの距離:', rect.bottom);
console.log('要素の右端からの距離:', rect.right);
この例では、`getBoundingClientRect()`を使用して`#myElement`のサイズと位置を取得し、コンソールに出力しています。
注意点
`getBoundingClientRect()`は、ビューポートに対する相対位置を返します。したがって、ページをスクロールすると、同じ要素に対してこのメソッドが返す`top`や`left`の値は変化します。
返される`DOMRect`オブジェクトは読み取り専用です。したがって、これらの値を直接変更することはできません。
ほかにも、rect.xやrect.yの値もあるよね? んで、rect.xの値は、rect.leftの値と等しくて、rect.yの値は、rect.topの値と等しいよね? topやleftの値がスクロールによって変化するというのは、xやyの値から算出してるからよね?🤔
はい、その通りです。`getBoundingClientRect()`メソッドによって返される`DOMRect`オブジェクトは、`x`、`y`、`top`、`right`、`bottom`、`left`、`width`、`height`というプロパティを持っています。ここで、`x`と`left`、`y`と`top`の値は基本的に等しくなります。これらのプロパティは、要素のビューポート内での位置とサイズを示しています。
`x`、`left`:要素の左端がビューポートの左端からどれだけ離れているかを示します。
`y`、`top`:要素の上端がビューポートの上端からどれだけ離れているかを示します。
これらの値がスクロールによって変化するのは、`getBoundingClientRect()`がビューポートに対する要素の相対的な位置を返すからです。ページをスクロールすると、要素のビューポートにおける相対位置が変わります。そのため、`top`や`left`(同様に`x`や`y`も)の値は、スクロール位置に応じて変化します。
`width`と`height`は要素のサイズを示しており、スクロールとは無関係です。しかし、`top`、`right`、`bottom`、`left`、`x`、`y`はビューポートに対する位置を示すため、ページのスクロールによってこれらの値は変わります。
この挙動により、`getBoundingClientRect()`は、要素の現在のビューポート内での正確な位置を取得するために非常に便利なツールです。例えば、スクロールに基づいて特定の要素に対する動的なスタイル変更や、要素がビューポート内にあるかどうかの判定などに利用されます。
(自分のキャラクターの位置とかの把握で、かつて使ってたような気がするのう・・。懐かしいのう・・。🫠)
俺も電子本で、HTML、CSS、JavaScriptの本を出版しておりますッ! ご興味あれば、よろしくお願いいたしますッ!!
それでは、最後まで読んでいただき、ありがとうございましたッ!!
いいなと思ったら応援しよう!
![gorojy](https://assets.st-note.com/production/uploads/images/172166903/profile_a9600fc7e2166bc937e3b5560c69d5cc.png?width=600&crop=1:1,smart)