Element: getBoundingClientRect() ã¡ã½ãã
Baseline
åºãå©ç¨å¯è½
ãã®æ©è½ã¯åºãå®è£ ããã¦ãããå¤ãã®ãã¼ã¸ã§ã³ã®ç«¯æ«ããã©ã¦ã¶ã¼ã§åä½ãã¾ãã2015å¹´7æä»¥éããã¹ã¦ã®ãã©ã¦ã¶ã¼ã§å©ç¨å¯è½ã§ãã
Element.getBoundingClientRect() ã¡ã½ããã¯ãè¦ç´ ã®å¯¸æ³ã¨ããã®ãã¥ã¼ãã¼ãã«å¯¾ããç¸å¯¾ä½ç½®ã«é¢ããæ
å ±ã
DOMRect ãªãã¸ã§ã¯ãã§è¿ãã¾ãã
æ§æ
getBoundingClientRect()
弿°
ãªãã
è¿å¤
è¿å¤ã¯ DOMRect ãªãã¸ã§ã¯ãã§ãï¼ããã£ã³ã°ã¨å¢çã®å¹
ãå«ãï¼è¦ç´ å
¨ä½ãåã¾ãæå°ã®é·æ¹å½¢ã§ããleft, top, right, bottom, x, y, width, height ã®åããããã£ã¯ãé·æ¹å½¢ã®å
¨ä½ã®ä½ç½®ã¨å¤§ããããã¯ã»ã«æ°ã§è¨è¿°ãã¾ããwidth 㨠height 以å¤ã®ããããã£ã¯ããã¥ã¼ãã¼ãã®å·¦ä¸ãåºæºã¨ãã¦ãã¾ãã

ãã®ã¡ã½ãããè¿ã DOMRect ãªãã¸ã§ã¯ãã® width 㨠height ããããã£ã¯ãå
容ç©ã®å¹
ãé«ãã ãã§ãªãã padding 㨠border-width ãå«ã¾ãã¾ããæ¨æºçãªããã¯ã¹ã¢ãã«ã§ã¯ãããã¯è¦ç´ ã® width ã¾ã㯠height ãããã㣠+ padding + border-width ã¨åãã«ãªãã¾ãããããããã box-sizing: border-box ãè¦ç´ ã«è¨å®ããã¦ããã°ããã㯠width ã¾ã㯠height ã¨çãããªãã¾ãã
è¿ãããå¤ã¯ããã®è¦ç´ ã«å¯¾ã㦠getClientRects() ãè¿ãç©å½¢ã®åãã¤ã¾ãããã®è¦ç´ ã«é¢é£ãã CSS ã® border-box ã¨è¦ãªããã¨ãã§ãã¾ãã
空ã®ãã¼ãã¼ããã¯ã¹ã¯å®å
¨ã«ç¡è¦ããã¾ããããè¦ç´ ã®ãã¼ãã¼ããã¯ã¹ã®å
¨ã¦ã空ã§ããå ´åã¯ã width 㨠height ã 0 ã§ã top 㨠left ã¯ãè¦ç´ ã«å¯¾ããï¼ã³ã³ãã³ãé ã§ã®ï¼æåã® CSS ããã¯ã¹ã®å·¦ä¸ã§ããç©å½¢ãè¿ãã¾ãã
å¢çç©å½¢ãè¨ç®ããã¨ãã«ã¯ããã¥ã¼ãã¼ãé åï¼ã¾ãã¯ä»ã®ã¹ã¯ãã¼ã«å¯è½ãªè¦ç´ ï¼ã®ã¹ã¯ãã¼ã«éãèæ
®ããã¾ããããã¯ãã¹ã¯ãã¼ã«ä½ç½®ã夿´ããã度ã«ï¼ãã®å¤ã¯ãã¥ã¼ãã¼ãã®ç¸å¯¾å¤ã§ããã絶対å¤ã§ã¯ãªããã) ç©å½¢ã®å¢çã®è¾º (top, right, bottom, left) ã夿´ããããã¨ãæå³ãã¦ãã¾ãã
ããææ¸ã®å·¦ä¸é
ãåºæºã¨ããå¢çç©å½¢ãå¿
è¦ãªå ´åã¯ãç¾å¨ã®ã¹ã¯ãã¼ã«ä½ç½®ããç¬ç«ããå¢çç©å½¢ãåå¾ãã top 㨠left ããããã£ã«ãç¾å¨ã®ã¹ã¯ãã¼ã«ä½ç½®ãå ããã ãã§ãï¼ããã㯠window.scrollY 㨠window.scrollX ã§åå¾ã§ãã¾ãï¼ã
ä¾
>åºæ¬
ãã®åç´ãªä¾ã§ã¯ãåç´ãª <div> è¦ç´ ã®ã¯ã©ã¤ã¢ã³ãç©å½¢ã表ã DOMRect ãªãã¸ã§ã¯ããåå¾ãããã®ä¸ã«ããããã£ãåºåãã¦ãã¾ãã
<div></div>
div {
width: 400px;
height: 200px;
padding: 20px;
margin: 50px auto;
background: purple;
}
let elem = document.querySelector("div");
let rect = elem.getBoundingClientRect();
for (const key in rect) {
if (typeof rect[key] !== "function") {
let para = document.createElement("p");
para.textContent = `${key} : ${rect[key]}`;
document.body.appendChild(para);
}
}
ãªãã width/height 㯠width/height + padding ã¨çãããªãã¾ãã
ã¾ããx/left, y/top, right, bottom ã®å¤ã¯ãããããã®ã±ã¼ã¹ã§ããã¥ã¼ãã¼ãã®é¢é£ãã辺ããè¦ç´ ã®ãã®å´ã¾ã§ã®çµ¶å¯¾çãªè·é¢ã«çãããã¨ã«æ³¨æãã¦ãã ããã
ã¹ã¯ãã¼ã«
ãã®ä¾ã§ã¯ãææ¸ãã¹ã¯ãã¼ã«ãããã¨ãã«ãã¯ã©ã¤ã¢ã³ãç©å½¢ã®å¢çãã©ã®ããã«å¤åãããã示ãã¦ãã¾ãã
<div id="example"></div>
<div id="controls"></div>
div#example {
width: 400px;
height: 200px;
padding: 20px;
margin: 50px auto;
background: purple;
}
body {
padding-bottom: 1000px;
}
p {
margin: 0;
}
function update() {
const container = document.getElementById("controls");
const elem = document.getElementById("example");
const rect = elem.getBoundingClientRect();
container.textContent = "";
for (const key in rect) {
if (typeof rect[key] !== "function") {
let para = document.createElement("p");
para.textContent = `${key} : ${rect[key]}`;
container.appendChild(para);
}
}
}
document.addEventListener("scroll", update);
update();
仿§æ¸
| 仿§æ¸ |
|---|
| CSSOM View Module > # dom-element-getboundingclientrect > |