screenX / Y, clientX / Y 및 pageX / Y의 차이점은 무엇입니까?


581

screenX/ Y, clientX/ Y및 pageX/ 의 차이점은 무엇입니까 Y?

또한 iPad Safari의 경우 계산이 데스크탑에서와 비슷합니까? 아니면 뷰포트로 인해 약간의 차이가 있습니까?

예를 들어 주시면 좋을 것입니다.


2
마우스 좌표를 얻기 위해 5 가지 속성 (화면, 클라이언트, 페이지, 레이어, 오프셋)을 사용하는 또 다른 데모 .
— akinuri

답변:


504

자바 스크립트에서 :

pageX, pageY, screenX, screenY, clientX, 및 clientY복귀 물리적 "CSS 픽셀"의 수를 나타내는 숫자는 점은 원점으로부터이다. 이벤트 지점은 사용자가 클릭 한 지점이며, 기준 지점은 왼쪽 상단의 지점입니다. 이러한 속성은 해당 기준점에서 수평 및 수직 거리를 반환합니다.

pageX및 pageY:
브라우저에서 완전히 렌더링 된 컨텐트 영역의 왼쪽 상단을 기준으로합니다. 이 기준점은 왼쪽 상단의 URL 표시 줄 및 뒤로 버튼 아래에 있습니다. 이 지점은 브라우저 창의 어느 곳에 나있을 수 있으며 페이지 내에 임베드 된 스크롤 가능 페이지가 있고 사용자가 스크롤 막대를 이동하면 실제로 위치를 변경할 수 있습니다.

screenX및 screenY:
실제 화면 / 모니터의 왼쪽 상단에 상대적으로이 기준점은 모니터 수 또는 모니터 해상도를 늘리거나 줄인 경우에만 이동합니다.

clientX및 clientY: 브라우저 창의
컨텐츠 영역 ( 뷰포트 )의 왼쪽 위 모서리를 기준으로합니다. 사용자가 브라우저 내에서 스크롤 막대를 움직여도이 지점은 이동하지 않습니다.

어떤 브라우저가 어떤 속성을 지원하는지 시각적으로 보려면 :

http://www.quirksmode.org/dom/w3c_cssom.html#t03

w3schools는 온라인 Javascript 인터프리터 및 편집기를 갖추고 있으므로 각각의 기능을 볼 수 있습니다

http://www.w3schools.com/jsref/tryit.asp?filename=try_dom_event_clientxy

<!DOCTYPE html>
<html>
<head>
<script>
function show_coords(event)
{
  var x=event.clientX;
  var y=event.clientY;
  alert("X coords: " + x + ", Y coords: " + y);
}
</script>
</head>

<body>

<p onmousedown="show_coords(event)">Click this paragraph, 
and an alert box will alert the x and y coordinates 
of the mouse pointer.</p>

</body>
</html>


4
jquery에서 offsetX와 offsetY는 부모 컨테이너와 관련이 있습니다
— Muhammad Umer

2
w3schools에 대한 링크는 현재 참조 섹션을 통해서만 제공되는 것 같습니다 : w3schools.com/jsref/tryit.asp?filename=try_dom_event_clientxy
— 유효한

1
URLX 및 페이지 버튼을 참조하기 때문에 pageX / pageY (결과적으로 질문)에 대해 오해의 소지가 있거나 적어도 비효율적 인 설명이라고 생각하지만 시각적 설명과 같이 페이지 내용으로 더 잘 설명됩니다. 대답은 말한다. 또한 w3schools 예제는 하나의 x / y 쌍만 출력하므로 차이가 있음을 나타내는 스크롤이 없으므로 도움이되지 않습니다.
— Robert Monfera

4
PageX / PageY 및 ClientX / clientY 설명이 서로 바뀝니다. 정정해야합니다. 오해의 소지가 있습니다
— Navpreet Kaur

1
@NavpreetKaur가 옳다고 생각합니다. 이 답변은 clientX 대 pageX에 관한 반대 의견을 가져옵니다
— zhouji

496

여기의 차이를 설명하는 그림이다 pageY하고 clientY.

pageY 대 클라이언트 Y

대한 동일 pageX하고 clientX각각.


pageX/Y 좌표는 렌더링 된 전체 페이지의 왼쪽 상단을 기준으로합니다 (스크롤로 숨겨진 부분 포함).

반면 clientX/Y좌표가 페이지의 보이는 부분의 왼쪽 상단 모서리를 기준으로하며, 브라우저 창을 통해 "볼".

데모보기

당신은 아마 필요 없을 것입니다 screenX/Y


21
굉장, 데모 주셔서 감사합니다, 텍스트보다 더 잘 설명합니다.
— Rahul Prasad

@SimoEndre의 설명이 가장 좋습니다
— Pierre

9
무엇을 시각화 할까 screenX/Y?
— ayjay

1
페이지의 특정 사각형 영역에 클릭 이벤트를 바인딩하고 싶습니다. pageX/pageY대신에 사용해야합니다 clientX/clientY.
— techie_28

1
간단한 x와 y는 어떻습니까? 그들은 그것을 시도했을 때 clientX / Y와 동일하게 보이지만 그것에 대한 명확한 참조를 찾지 못했습니다
— zhouji

117
  1. pageX / Y 는 <html>CSS 픽셀 의 요소를 기준으로 좌표를 제공합니다 .
  2. clientX / Y 는 viewportCSS 픽셀을 기준으로 좌표를 제공합니다 .
  3. screenX / Y 는 screen장치 내 픽셀을 기준으로 좌표를 제공합니다 .

데스크톱 및 모바일 브라우저에서 계산이 유사한 경우 마지막 질문에 대해 ... 모바일 브라우저에서 더 나은 이해를 위해서는 레이아웃 뷰포트 와 시각적 뷰포트 라는 두 가지 새로운 개념을 차별화해야합니다 . 시각적 뷰포트는 현재 화면에 표시되는 페이지의 일부입니다. 배치 뷰포트는 데스크탑 브라우저에서 렌더링되는 전체 페이지 (현재 뷰포트에 표시되지 않는 모든 요소 포함)와 동의어입니다.

모바일 브라우저의 pageX및 pageY문서 페이지를 기준으로 마우스 좌표를 얻을 수 있도록 여전히 CSS 픽셀의 페이지를 기준으로합니다. 한편 clientX하고 clientY받는 관계 마우스 좌표를 정의하는 시각적 뷰포트 .

시각적 뷰포트와 레이아웃 뷰포트의 차이점에 대한 또 다른 스택 오버 스레드가 있습니다. 비주얼 뷰포트와 레이아웃 뷰포트의 차이점은 무엇입니까?

또 다른 좋은 자료 : http://www.quirksmode.org/mobile/viewports2.html


27

이 페이지에 직접 이벤트를 추가하고 주변을 클릭하는 것이 도움이되었습니다! 개발자 도구 / Firebug 등에서 콘솔을 열고 다음을 붙여 넣습니다.

document.addEventListener('click', function(e) {
  console.log(
    'page: ' + e.pageX + ',' + e.pageY,
    'client: ' + e.clientX + ',' + e.clientY,
    'screen: ' + e.screenX + ',' + e.screenY)
}, false);
Click anywhere

이 스 니펫을 사용하면 스크롤 할 때 클릭 위치를 추적하고 브라우저 창을 이동할 수 있습니다.

맨 위로 스크롤하면 pageX / Y와 clientX / Y가 동일합니다.


5

이들의 차이점은 현재 참조하고있는 브라우저에 따라 다릅니다. 각각은 이러한 속성을 다르게 구현하거나 전혀 구현하지 않습니다. Quirksmode 에는 DOM 및 JavaScript Events와 같은 W3C 표준과 관련하여 브라우저 차이점에 관한 훌륭한 문서가 있습니다.


4
귀하의 답변은 좋지만 곧 구식이 될 것입니다 quirksmode.org/mobile/tableViewport_desktop.html
— Dan
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.