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


581

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

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

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


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

답변:


504

자바 스크립트에서 :

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

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

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

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

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

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 / YviewportCSS 픽셀을 기준으로 좌표를 제공합니다 .
  3. screenX / Yscreen장치 내 픽셀을 기준으로 좌표를 제공합니다 .

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

모바일 브라우저의 pageXpageY문서 페이지를 기준으로 마우스 좌표를 얻을 수 있도록 여전히 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.