노드의 시각적인 형태와 지오메트리를 프로그래밍을 통해 살펴보고 조작하기 위한 일련의 API가 존재한다.
offsetTop
과 offsetLeft
속성을 이용하면 offsetParent
로부터 element
노드의 오프셋 픽셀 값을 가져올 수 있다. 즉 elemenet
의 좌상단 경계로부터 안쪽 좌상단 경계 까지의 거리를 픽셀로 제공해준다.
offsetParent
는 가장 가까운 부모 element
를 검색하게 된다.
<body>
#blue{
height: 100px;
width: 100px;
border: 10px solid gray;
}
#red{
height: 50px;
width: 50px;
border: 10px solid gray;
}
</body>
var div = document.querySelector('#red');
div.offsetTop // 60
div.offsetLeft; // 60
div.offsetParent; // <body>
getBoundingClientRect()
를 이용하면 뷰포트의 좌상단 끝을 기준으로 elememt
의 바깥쪽 테두리 위치를 얻을 수 있다.
<body>
div{
height: 50px;
width: 50px;
border: 10px solid gray;
}
</body>
var divEdges = document.querySelector('div').getBoundingClientRect();
divEdges.top // 100
divEdges.right // 170
divEdges.bottom // 170
divEdges.left // 100
getBoundingClientRect()
는 top, bottom, left, right 뿐 만 아니라 height, width 값도 반환한다. 이는 테두리 + 패딩 + 내용을 모두 더한 값이다.
<body>
div{
height: 25px;
width: 25px;
border: 25px solid gray
}
</body>
var div = document.querySelector('div').getBoundingClientRect();
div.height // 125
div.width // 125
offsetHeight
와 offsetWidht
를 이용해 쉽게 얻을 수 있다.
var div = document.querySelector("div");
div.offsetHeight; // 125
div.offsetWidht; // 125
clientHight
와 clientWidht
를 이용해 패딩 + 내용을 얻을 수 있다.
<body>
div{
height: 25px;
width: 25px;
border: 25px solid gray
}
</body>
var div = document.querySelector('div')
div.clientHight // 75 ( 테두리 제외 )
div.clientWidth // 75 ( 테두리 제외 )
elementFromPoint()
를 사용하여 최상단 element
에 대한 참조를 얻을 수 있다. 즉 dom 에 접근 가능
<body>
<div id="bottom"></div>
<div id="top"></div>
</body>;
console.log(document.elementFromPoint(50, 50)); // top
scrollHeight
와 scrollWidth
를 이용해 스크롤될 노드의 높이와 너비를 알 수 있다. 즉 스크롤 막대의 길이를 알 수 있다.
<body>
div{
height: 100px;
width: 100px;
overflow: auto;
}
p{
hight: 1000px;
width: 1000px;
}
</bidy>
var div = document.querySelector('div');
div.scrollHeight // 1000
div.scrollWidht // 1000
scrollTop과
과 scollLeft
를 이용해 스크롤의 위치를 알 수 있다. 상하 스크롤이라면 top, 좌우 스크롤이라면 left를 이용해 스크롤된 바의 위치를 알 수 있다.
스크롤이 가능한 노드 내에 있는 노드를 선택하면 scrollIntoView()
메서드를 사용해 선택된 노드가 view로 스크롤되도록 할 수 있다. scoroll spy
기능 처럼 필요한 dom 에 스크롤이 되게 할 수 있다.