[JavaScript] 절대 좌표, 상대 좌표 구하기

Lpla

·

2021. 7. 28. 21:31

반응형

 

HTML

<div class="box box1"></div>
<div class="box box2"></div>

 

CSS

html, body { margin: 0; padding: 0;  }
.box { width: 500px; height: 500px; position: absolute; }
.box1 { background-color: bisque; top: 1000px; left: 50%; transform: translateX(-50%); }
.box2 { background-color: brown; top: 3000px; left: 50%; transform: translateX(-50%); }

 

box1의 top은 페이지(문서) 기준으로 1000px이다.

하지만 내가 보고 있는 화면을 기준(viewport)으로 좌표를 측정한다면 0px이 될 수도 있고 -1000px이 될 수도 있다.

 

 

1. 상대 좌표

의외로 절대 좌표보다 상대 좌표를 구하는 것이 더 쉽다.

// 상대 좌표 구하기
let element1 = document.querySelector('.box1');
let elementTop1 = element1.getBoundingClientRect().top;
console.log(elementTop1); // 현재 화면의 위치에 따라 값이 달라진다 ex)1000, 200, -1000 등...

 

2. 절대 좌표

절대 좌표는 위에서 사용한 getBoundingClientRect()와 함께 pageYOffset(혹은 pageXOffset)을 사용한다.

 

 

 

즉 현재 화면으로부터 요소의 거리 + 화면을 스크롤한 거리이다.

// 절대 좌표 구하기
let element2 = document.querySelector('.box1');
let elementTop2 = window.pageYOffset + element2.getBoundingClientRect().top;
console.log(elementTop2) // 1000

 

3. 다른 요소로부터 좌표

box1으로부터 box2가 얼마나 떨어져 있는지 구하고 싶다면 box1의 절대 좌표를 구해서 box2의 절대 좌표에서 그 값을 빼면 된다.

// 다른 요소로부터 좌표 구하기
let element3 = document.querySelector('.box1');
let target = document.querySelector('.box2');
let elementTop3 = window.pageYOffset + element3.getBoundingClientRect().top;
let targetTop = window.pageYOffset + target.getBoundingClientRect().top;
console.log(targetTop - elementTop3);

 

 

4. 제이쿼리(jQuery)

// 절대 좌표 구하기
let position1 = $('.box1').offset().top;
console.log(position1);

// 상대 좌표 구하기
let position2 = $(window).scrollTop();
console.log(position1 - position2);

// 다른 요소로부터 좌표 구하기
let position3 = $('.box2').offset().top - $('.box1').offset().top;
console.log(position3);
반응형