Qual è la differenza tra screenX
/ Y
, clientX
/ Y
e pageX
/ Y
?
Anche per iPad Safari, i calcoli sono simili a quelli sul desktop — O c'è qualche differenza a causa del viewport?
Sarebbe bello se potessi indicarmi un esempio.
Qual è la differenza tra screenX
/ Y
, clientX
/ Y
e pageX
/ Y
?
Anche per iPad Safari, i calcoli sono simili a quelli sul desktop — O c'è qualche differenza a causa del viewport?
Sarebbe bello se potessi indicarmi un esempio.
Risposte:
In JavaScript:
pageX
, pageY
, screenX
, screenY
, clientX
, E clientY
restituisce un numero che indica il numero di “pixel CSS” fisici un punto è dal punto di riferimento. Il punto dell'evento è dove l'utente ha fatto clic, il punto di riferimento è un punto in alto a sinistra. Queste proprietà restituiscono la distanza orizzontale e verticale da quel punto di riferimento.
pageX
e pageY
:
relativo alla parte superiore sinistra dell'area di contenuto con rendering completo nel browser. Questo punto di riferimento si trova sotto la barra dell'URL e il pulsante Indietro in alto a sinistra. Questo punto può trovarsi ovunque nella finestra del browser e può effettivamente cambiare posizione se ci sono pagine scorrevoli incorporate incorporate all'interno di pagine e l'utente sposta una barra di scorrimento.
screenX
e screenY
:
rispetto alla parte superiore sinistra dello schermo / monitor fisico, questo punto di riferimento si sposta solo se si aumenta o diminuisce il numero di monitor o la risoluzione del monitor.
clientX
e clientY
:
relativo al bordo superiore sinistro dell'area del contenuto ( il riquadro di visualizzazione ) della finestra del browser. Questo punto non si sposta anche se l'utente sposta una barra di scorrimento all'interno del browser.
Per una visualizzazione su quali browser supportano quali proprietà:
http://www.quirksmode.org/dom/w3c_cssom.html#t03
w3schools ha un interprete e un editor Javascript online in modo da poter vedere cosa fanno ciascuno
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>
Ecco un'immagine che spiega la differenza tra pageY
e clientY
.
Lo stesso per pageX
e clientX
, rispettivamente.
pageX/Y
le coordinate sono relative all'angolo in alto a sinistra dell'intera pagina renderizzata (comprese le parti nascoste mediante scorrimento),
mentre le clientX/Y
coordinate sono relative all'angolo in alto a sinistra della parte visibile della pagina, "viste" attraverso la finestra del browser.
Probabilmente non ne avrai mai bisogno screenX/Y
screenX/Y
?
pageX/pageY
dovrebbe essere usato al posto di clientX/clientY
?
<html>
all'elemento in pixel CSS.viewport
pixel CSS.screen
pixel del dispositivo.Per quanto riguarda la tua ultima domanda se i calcoli sono simili sui browser desktop e mobile ... Per una migliore comprensione - sui browser mobili - dobbiamo differenziare due nuovi concetti: il viewport del layout e il viewport visivo . Il viewport visivo è la parte della pagina attualmente visualizzata sullo schermo. La finestra di layout è sinonimo di una pagina intera visualizzata su un browser desktop (con tutti gli elementi che non sono visibili nella finestra corrente).
Sui browser mobili, i pageX
e pageY
sono ancora relativi alla pagina in pixel CSS in modo da poter ottenere le coordinate del mouse relative alla pagina del documento. D'altra parte clientX
e clientY
definire le coordinate del mouse in relazione alla finestra visiva .
C'è un altro thread stackover qui per quanto riguarda le differenze tra la vista visiva e la vista layout: differenza tra vista visiva e vista layout?
Un'altra buona risorsa: http://www.quirksmode.org/mobile/viewports2.html
Ciò che mi ha aiutato è stato quello di aggiungere un evento direttamente a questa pagina e fare clic da solo! Apri la tua console in strumenti per sviluppatori / Firebug ecc. E incollalo:
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 questo frammento, è possibile tenere traccia della posizione dei clic mentre si scorre, si sposta la finestra del browser, ecc.
Notare che pageX / Y e clientX / Y sono gli stessi quando si scorre fino in cima!
La differenza tra queste dipenderà in gran parte dal browser a cui ti riferisci attualmente. Ognuno implementa queste proprietà in modo diverso o per niente. Quirksmode ha un'ottima documentazione relativa alle differenze del browser rispetto agli standard W3C come DOM e JavaScript Events.