[javascript] 화면 상에서의 위치
모바일 화면에서 아래쪽에 모달 처럼 뜨는 (bottom sheet라고 하더이다.)를 구현해보고 싶어서 서칭을 하던 중. 콴다 기술 블로그에서 구현 방법을 자세하게 적어둔 글을 보게 되었다. 따라해보는데, 내가 그동안 화면 내에서의 높이, 길이, 너비 등등을 제대로 이해하지 못하고 있었구나. 라는 생각이 들어서 정리를 해보기로 했다.
화면의 element size
need to know the total amount of space an element occupies
HTMLElement.offsetWidth
, HTMLElement.offsetHeight
는 엘리먼트의 전체 크기를 반환. padding, border, scroll bar의 크기를 포함한다.
need to know how much space the actual displayed content takes up
HTMLElement.clientWidth
, HTMLElement.clientHeight
, 는 padding만 포함해서 element의 크기를 반환한다.
need to know the actual size of the content
HTMLElement.scrollWidth
, HTMLElement.scrollHeight
, 는 화면에 보이는 것에 상관없이 실제 element 크기를 반환한다.
offsetWidth vs getBoundingClientRect()
두 프로퍼티(와 매서드) 모두 element의 크기를 가죠올 수 있는 방법이다. 이 중 getBoundingClientRect()
를 통해서 화면에 보여지는 element의 위치를 알 수 있다.
이 때, 기준은 화면상이므로 실제 document의 아래쪽으로 스크롤이 내려와 화면상에서 위로 바깥으로 벗어나게 된다면 음수의 값이 나올 수도 있다.
const rect = element.getBoundingclientRect();
{
x : 256.3078918457031
y : 49.98843002319336
width : 439.9653015136719
height : 239.9652862548828
top : 49.98843002319336
right : 696.273193359375
bottom : 289.9537162780762
left : 256.3078918457031
}
mouse event
서칭을 해보다가 mouse event의 좌표를 얻어올 수 있다는 점도 찾을 수 있었다.
clientX, clientY
mouse event가 일어나는 viewport에서의 x,y를 나타낸다.
따라서 scroll이 일어나도 동일한 값을 낸다.
screenX, screenY
global(screen)에서의 마우스 위치를 나타낸다.
offsetX, offsetY
mouse event가 일어나는 element 안에서의 x, y를 나타낸다.
pageX, pageY
전체 문서를 기준으로 마우스의 위치를 나타낸다.
어떤 것을 사용할까??
우리가 보는 화면 상에서의 element와 mouse event를 사용해야 한다면,
getBoundingClientRect()
와 clientX/Y
를 사용하면 된다.
참고
https://developer.mozilla.org/en-US/docs/Web/API/CSS_Object_Model/Determining_the_dimensions_of_elements
https://hianna.tistory.com/493
Author And Source
이 문제에 관하여([javascript] 화면 상에서의 위치), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@raverana96/javascript-화면-상에서의-위치저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)