What is the difference between screenX
/Y
, clientX
/Y
and pageX
/Y
?
Also for iPad Safari, are the calculations similar as on desktop—OR there is some difference because of viewport?
It would be great if you could point me to an example.
What is the difference between screenX
/Y
, clientX
/Y
and pageX
/Y
?
Also for iPad Safari, are the calculations similar as on desktop—OR there is some difference because of viewport?
It would be great if you could point me to an example.
Here's a picture explaining the difference between pageY
and clientY
and screenY
.
Same for pageX
and clientX
and screenX
, respectively.
pageX/Y
coordinates are relative to the top left corner of the whole rendered page (including parts hidden by scrolling),
while clientX/Y
coordinates are relative to the top left corner of the visible part of the page, "seen" through browser window.
screenX/Y
are relative to the physical screen.
or try this snippet:
document.addEventListener('DOMContentLoaded', _ => {
const info = document.getElementById('info');
const updateInfo = event => {
const { clientX, clientY, pageX, pageY } = event;
info.innerHTML = `clientX: ${clientX} clientY: ${clientY}<br /> pageX: ${pageX} pageY: ${pageY}`;
};
document.addEventListener('mouseover', updateInfo);
document.addEventListener('mousemove', updateInfo);
});
body {
border: 1px solid red;
min-height: 10000px;
margin: 10px;
}
#info {
border: 1px solid blue;
position: fixed;
top: 80px;
left: 40px;
}
<h3>Move the mouse around and scroll to see the values of clientX/Y and pageX/Y</h3>
<div id="info"></div>
Note: You'll probably never need screenX/Y
clientX/Y
. Some people could think that upper left corner of the browser window is the place where close button is on Mac. I would rather recommend to replace the current explanation (using imaginary moving point) with something like "the difference between pageX and clientX coordinates of the point is that first are relative to the top left corner of the whole page, while the second are relative to the top left corner of the visible part". People have different picture in their mind but probably my version is simpler... –
Sematic screenX/Y
is? –
Patrickpatrilateral pageX/pageY
should be used instead of clientX/clientY
? –
Check planetX
and planetY
prop on mouse scroll so you can measure the distance you scrolled from / to the moon T.T [/rant] –
Manion position:fixed
- then use clientX/clientY
. And if you have element with position:absolute
- based on the whole page - then use pageX/pageY
. –
Bistort screenX
and screenY
are relative to the physical screen, they're completely useless. –
Goby x
and y
are defined by the CSSOM-View module as aliases of clientX
and clientY
. –
Goby In JavaScript:
pageX
, pageY
, screenX
, screenY
, clientX
, and clientY
returns a number which indicates the number of logical “CSS pixels” an event point is from the reference point. The event point is where the user clicked and the reference point is a point in the upper left. These properties return the horizontal and vertical distance of the event point from that reference point.
pageX
and pageY
:
Relative to the top left of the fully rendered content area in the browser. This reference point is below the URL bar and back button in the upper left. This point could be anywhere in the browser window and can actually change location if there are embedded scrollable pages embedded within pages and the user moves a scrollbar.
screenX
and screenY
:
Relative to the top left of the physical screen/monitor, this reference point only moves if you increase or decrease the number of monitors or the monitor resolution.
clientX
and clientY
:
Relative to the upper left edge of the content area (the viewport) of the browser window. This point does not move even if the user moves a scrollbar from within the browser.
For a visual on which browsers support which properties:
http://www.quirksmode.org/dom/w3c_cssom.html#t03
<script>
function showCoordinates(event){
var x = event.clientX;
var y = event.clientY;
alert(`X coordinates: ${x}, Y coordinates: ${y}`);
}
</script>
<p onmousedown="showCoordinates(event)">
Click this paragraph, and an alert box will show the x
and y coordinates of the mouse relative to the viewport
</p>
clientX/Y
and pageX/Y
were incorrectly swapped on Jul 2019. I have just reverted them back to the original (which is correct). –
Stempson <html>
element in CSS pixels.viewport
in CSS pixels.screen
in device pixels.Regarding your last question if calculations are similar on desktop and mobile browsers... For a better understanding - on mobile browsers - we need to differentiate two new concept: the layout viewport and visual viewport. The visual viewport is the part of the page that's currently shown onscreen. The layout viewport is synonym for a full page rendered on a desktop browser (with all the elements that are not visible on the current viewport).
On mobile browsers the pageX
and pageY
are still relative to the page in CSS pixels so you can obtain the mouse coordinates relative to the document page. On the other hand clientX
and clientY
define the mouse coordinates in relation to the visual viewport.
There is another stackoverflow thread here regarding the differences between the visual viewport and layout viewport : Difference between visual viewport and layout viewport?
Another good resource: http://www.quirksmode.org/mobile/viewports2.html
offsetX/Y
? –
Gallaher What helped me was to add an event directly to this page and click around for myself! Open up your console in developer tools/Firebug etc and paste this:
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
With this snippet, you can track your click position as you scroll, move the browser window, etc.
Notice that pageX/Y and clientX/Y are the same when you're scrolled all the way to the top!
offsetX
/Y
Other interesting properties are offsetX
/Y
(offset between the mouse and the border of the clicked element/node). Here's a fuller picture:
The difference between those will depend largely on what browser you are currently referring to. Each one implements these properties differently, or not at all. Quirksmode has great documentation regarding browser differences in regards to W3C standards like the DOM and JavaScript Events.
clientX/Y refers to relative screen coordinates, for instance if your web-page is long enough then clientX/Y gives clicked point's coordinates location in terms of its actual pixel position while ScreenX/Y gives the ordinates in reference to start of page.
© 2022 - 2024 — McMap. All rights reserved.