¿Cuál es la diferencia entre screenX/Y, clientX/Y y pageX/Y?
¿Cuál es la diferencia entre screenX
/ Y
, clientX
/ Y
y pageX
/?Y
?
También para iPad Safari, ¿los cálculos son similares a los del escritorio, O hay alguna diferencia debido a la ventana gráfica?
Sería genial si pudieras indicarme un ejemplo.
Aquí hay una imagen que explica la diferencia entre pageY
y clientY
y screenY
.
Lo mismo para pageX
y clientX
y screenX
, respectivamente.
pageX/Y
las coordenadas son relativas a la esquina superior izquierda de toda la página renderizada (incluidas las partes ocultas al desplazarse),
mientras que clientX/Y
las coordenadas son relativas a la esquina superior izquierda de la parte visible de la página, "vista" a través de la ventana del navegador.
screenX/Y
son relativos a la pantalla física.
Ver demostración
o prueba este fragmento:
Mostrar fragmento de código
Nota : probablemente nunca necesitarásscreenX/Y
En JavaScript:
pageX
, pageY
, screenX
, screenY
, clientX
y clientY
devuelve un número que indica el número de “píxeles CSS” lógicos que tiene un punto de evento desde el punto de referencia. El punto de evento es donde el usuario hizo clic y el punto de referencia es un punto en la parte superior izquierda. Estas propiedades devuelven la distancia horizontal y vertical del punto del evento desde ese punto de referencia.
pageX
y pageY
:
en relación con la parte superior izquierda del área de contenido completamente renderizado en el navegador. Este punto de referencia se encuentra debajo de la barra de URL y el botón Atrás en la parte superior izquierda. Este punto podría estar en cualquier parte de la ventana del navegador y, de hecho, puede cambiar de ubicación si hay páginas desplazables incrustadas dentro de las páginas y el usuario mueve una barra de desplazamiento.
screenX
y screenY
:
En relación con la parte superior izquierda de la pantalla/monitor físico, este punto de referencia solo se mueve si aumenta o disminuye la cantidad de monitores o la resolución del monitor.
clientX
y clientY
:
relativo al borde superior izquierdo del área de contenido ( la ventana gráfica ) de la ventana del navegador. Este punto no se mueve incluso si el usuario mueve una barra de desplazamiento desde el navegador.
Para ver qué navegadores admiten qué propiedades:
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>
- pageX/Y proporciona las coordenadas relativas al
<html>
elemento en píxeles CSS. - clientX/Y proporciona las coordenadas relativas a los
viewport
píxeles en CSS. - screenX/Y proporciona las coordenadas relativas a los
screen
píxeles del dispositivo.
Con respecto a su última pregunta, si los cálculos son similares en los navegadores de escritorio y móviles... Para una mejor comprensión, en los navegadores móviles, debemos diferenciar dos conceptos nuevos: la ventana gráfica de diseño y la ventana gráfica visual . La ventana gráfica es la parte de la página que se muestra actualmente en pantalla. La ventana gráfica de diseño es sinónimo de una página completa representada en un navegador de escritorio (con todos los elementos que no son visibles en la ventana gráfica actual).
En los navegadores móviles, pageX
y pageY
siguen siendo relativos a la página en píxeles CSS para que pueda obtener las coordenadas del mouse relativas a la página del documento. Por otro lado clientX
, clientY
defina las coordenadas del mouse en relación con la ventana gráfica .
Hay otro hilo de stackoverflow aquí sobre las diferencias entre la ventana gráfica y la ventana gráfica de diseño: ¿ Diferencia entre la ventana gráfica visual y la ventana gráfica de diseño?
Otro buen recurso: http://www.quirksmode.org/mobile/viewports2.html
No me gustan ni entiendo las cosas que se pueden explicar visualmente, con palabras.
¡Lo que me ayudó fue agregar un evento directamente a esta página y hacer clic yo mismo! Abre tu consola en herramientas de desarrollo/Firebug, etc. y pega esto:
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
Con este fragmento, puede realizar un seguimiento de la posición de su clic mientras se desplaza, mueve la ventana del navegador, etc.
¡Observe que páginaX/Y y clienteX/Y son iguales cuando se desplaza hasta la parte superior!