ScreenX / Y, clientX / Y ve pageX / Y arasındaki fark nedir?


581

screenX/ Y, clientX/ YVe pageX/ arasındaki fark nedir Y?

Ayrıca iPad Safari için hesaplamalar masaüstünde olduğu gibi mi — VEYA görünüm penceresi nedeniyle bir fark var mı?

Beni bir örneğe yönlendirebilirsen harika olur.


2
Fare koordinatlarını almak için beş farklı özellik (ekran, istemci, sayfa, katman, ofset) kullanan bir başka demo .
akinuri

Yanıtlar:


504

JavaScript'te:

pageX, pageY, screenX, screenY, clientX, Ve clientYdöner fiziksel “CSS pikseller” sayısını belirten bir sayı nokta referans noktadan. Olay noktası kullanıcının tıkladığı yerdir, referans noktası sol üstteki bir noktadır. Bu özellikler, referans noktasından yatay ve dikey mesafeyi döndürür.

pageXve pageY:
Tarayıcıda tamamen oluşturulmuş içerik alanının sol üst kısmına göre. Bu referans noktası, sol üstteki URL çubuğunun ve geri düğmesinin altındadır. Bu nokta tarayıcı penceresinin herhangi bir yerinde olabilir ve sayfaların içine katıştırılmış gömülü kaydırılabilir sayfalar varsa ve kullanıcı bir kaydırma çubuğunu hareket ettirirse konumu değiştirebilir.

screenXve screenY:
Fiziksel ekranın / monitörün sol üst kısmına göre bu referans noktası yalnızca monitör sayısını veya monitör çözünürlüğünü artırır veya azaltırsanız hareket eder.

clientXve clientY: Tarayıcı penceresinin
içerik alanının ( görünüm penceresi ) sol üst kenarına göre . Kullanıcı tarayıcı içinden bir kaydırma çubuğu hareket ettirse bile bu nokta hareket etmez.

Hangi tarayıcıların hangi özellikleri desteklediğini görmek için:

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

w3schools'un çevrimiçi bir Javascript yorumlayıcısı ve editörü vardır, böylece her birinin ne yaptığını görebilirsiniz

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
ve jquery offsetX ve offsetY ana konteynere göredir
Muhammad Umer

2
W3schools bağlantısı şu anda yalnızca referans bölümünden alınabilir: w3schools.com/jsref/tryit.asp?filename=try_dom_event_clientxy
geçerli

1
SayfaX / pageY (ve sonuç olarak soru) için yanıltıcı veya en azından etkisiz bir açıklama olduğunu düşünüyorum, çünkü URL çubuğuna ve geri düğmesine bir başvuruda bulunurken, örneğin görsel açıklamadaki gibi sayfa içeriği açısından daha iyi açıklanmıştır. cevap söyler. Ayrıca, w3schools örneği yalnızca bir x / y çifti çıkardığı için yararlı değildir ve içinde farkı gösterecek kaydırma yoktur.
Robert Monfera

4
PageX / PageY ve ClientX / clientY açıklamaları birbirinin yerine kullanılır. düzeltmelisin. yanıltıcı
Navpreet Kaur

1
Bence @NavpreetKaur haklı. Bu cevap clientX vs
pageX ile

496

İşte pageYve arasındaki farkı açıklayan bir resim clientY.

pageY ve clientY

Sırasıyla pageXve için aynıdır clientX.


pageX/Y koordinatlar, oluşturulan sayfanın sol üst köşesine göredir (kaydırma ile gizlenen parçalar dahil),

süre clientX/Y koordinatlar sayfanın görünen kısmının sol üst köşesine göredir, tarayıcı penceresinde "görüldü".

Demoya Bakın

Muhtemelen asla ihtiyacın olmayacak screenX/Y


21
Harika, Demo için teşekkürler, metinden daha iyi açıklar.
Rahul Prasad

@ SimoEndre'nin en iyi açıklamasını seviyorum
Pierre

9
ne screenX/Yolduğunu görselleştirmek ister misiniz?
ayjay

1
Öyle sayfadaki belirli bir dikdörtgen alan üzerine bir tıklama olayı bağlamak istiyorum pageX/pageYyerine kullanılmalıdır clientX/clientY?
techie_28

1
ya basit x ve y? Denediğimde clientX / Y ile aynı görünüyorlar ama kesin bir referans bulamadım
zhouji

117
  1. pageX / Y ,<html> CSS piksellerindeki öğeye .
  2. clientX / Y ,viewport CSS piksellerindeki .
  3. screenX / Y , screenaygıt piksellerine göre koordinatları verir .

Hesaplamalar masaüstü ve mobil tarayıcılarda benzerse son sorunuzla ilgili ... Daha iyi bir anlayış için - mobil tarayıcılarda - iki yeni kavramı ayırmamız gerekiyor: düzen görünümü ve görsel görünüm . Görsel görünüm, sayfanın o anda ekranda gösterilen parçasıdır. Düzen görünüm penceresi, bir masaüstü tarayıcıda oluşturulan tam sayfa ile eşanlamlıdır (geçerli görünümde görünmeyen tüm öğelerle).

Mobil tarayıcılarda pageXve pageYhala CSS pikseli cinsinden sayfayla ilişkilidir, böylece belge sayfasına göre fare koordinatlarını elde edebilirsiniz. Öte yandan clientXve clientYilgili fare koordinatlar görsel görünüm .

Burada, görsel görüntü alanı ve düzen görünümü penceresi arasındaki farklarla ilgili başka bir yığın akışı iş parçacığı var: Görsel görünüm alanı ve düzen görünümü penceresi arasındaki fark?

Başka bir iyi kaynak: http://www.quirksmode.org/mobile/viewports2.html


27

Bana yardımcı olan şey, doğrudan bu sayfaya bir etkinlik eklemek ve kendim için tıklamaktı! Konsolunuzu geliştirici araçlarında / Firebug vb. İçinde açın ve yapıştırın:

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

Bu snippet ile, tıklama, tarayıcı penceresini hareket ettirme vb. Gibi tıklama konumunuzu izleyebilirsiniz.

En üste kaydırdığınızda pageX / Y ve clientX / Y'nin aynı olduğuna dikkat edin!


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.