ความแตกต่างระหว่าง screenX / Y, clientX / Y และ pageX / Y คืออะไร?


581

อะไรคือความแตกต่างระหว่างscreenX/ Y, clientX/ YและpageX/ Y?

นอกจากนี้สำหรับ iPad Safari การคำนวณคล้ายกับบนเดสก์ท็อปหรือมีความแตกต่างเนื่องจากวิวพอร์ตหรือไม่

คงจะดีมากถ้าคุณชี้ให้ฉันเป็นตัวอย่าง


2
การสาธิตอื่นที่ใช้คุณสมบัติที่แตกต่างกันห้าแบบ (หน้าจอไคลเอนต์หน้าเลเยอร์ออฟเซ็ต) เพื่อรับพิกัดเมาส์
akinuri

คำตอบ:


504

ใน JavaScript:

pageX, pageY, screenX, screenY, clientXและclientYส่งกลับจำนวนซึ่งบ่งชี้ว่าจำนวนกาย“พิกเซล CSS” จุดเป็นจุดอ้างอิงจากที่ จุดเหตุการณ์คือจุดที่ผู้ใช้คลิกจุดอ้างอิงคือจุดที่ด้านซ้ายบน คุณสมบัติเหล่านี้ส่งคืนระยะทางแนวนอนและแนวตั้งจากจุดอ้างอิงนั้น

pageXและpageY:
สัมพันธ์กับด้านบนซ้ายของพื้นที่เนื้อหาที่แสดงผลอย่างสมบูรณ์ในเบราว์เซอร์ จุดอ้างอิงนี้อยู่ด้านล่างแถบ URL และปุ่มย้อนกลับด้านซ้ายบน จุดนี้อาจอยู่ที่ใดก็ได้ในหน้าต่างเบราว์เซอร์และสามารถเปลี่ยนตำแหน่งได้จริงหากมีหน้าเลื่อนฝังอยู่ภายในหน้าเว็บและผู้ใช้ย้ายแถบเลื่อน

screenXและscreenY:
สัมพันธ์กับด้านบนซ้ายของหน้าจอทางกายภาพ / จอภาพจุดอ้างอิงนี้จะย้ายเฉพาะถ้าคุณเพิ่มหรือลดจำนวนจอภาพหรือความละเอียดของจอภาพ

clientXและclientY:
สัมพันธ์กับขอบด้านซ้ายบนของพื้นที่เนื้อหา ( วิวพอร์ต ) ของหน้าต่างเบราว์เซอร์ จุดนี้ไม่ย้ายแม้ว่าผู้ใช้จะย้ายแถบเลื่อนจากภายในเบราว์เซอร์

สำหรับภาพที่เบราว์เซอร์สนับสนุนคุณสมบัติ:

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

w3schools มีล่ามและจาวาสคริปต์ออนไลน์เพื่อให้คุณสามารถดูว่าแต่ละคนทำอะไร

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 เป็นญาติกับภาชนะแม่
มูฮัมหมัด Umer

2
ดูเหมือนว่าลิงก์ไปยัง w3schools จะพร้อมใช้งานในส่วนการอ้างอิงเท่านั้นตอนนี้: w3schools.com/jsref/tryit.asp?filename=try_dom_event_clientxy
ใช้ได้ตั้งแต่

1
ฉันคิดว่ามันเป็นคำอธิบายที่ทำให้เข้าใจผิดหรืออย่างน้อยก็ไม่มีประโยชน์สำหรับ pageX / pageY (และด้วยเหตุนี้คำถาม) เพราะมันอ้างอิงถึงแถบ URL และปุ่มย้อนกลับในขณะที่มันอธิบายได้ดีขึ้นในแง่ของเนื้อหาของหน้าเว็บเช่น คำตอบบอก นอกจากนี้ตัวอย่าง w3schools ไม่เป็นประโยชน์เพราะมันให้ผลลัพธ์เพียงหนึ่งคู่ x / y และไม่มีการเลื่อนในซึ่งจะแสดงให้เห็นถึงความแตกต่าง
Robert Monfera

4
คำอธิบาย PageX / PageY & ClientX / clientY ถูกสับเปลี่ยน คุณควรแก้ไขให้ถูกต้อง มันทำให้เข้าใจผิด
Navpreet Kaur

1
ฉันคิดว่า @NavpreetKaur นั้นถูกต้อง คำตอบนี้ตรงข้ามกับ clientX เทียบกับ pageX
zhouji

496

นี่คือภาพที่อธิบายความแตกต่างระหว่างและpageYclientY

pageY vs clientY

เหมือนกันpageXและclientXตามลำดับ


pageX/Y พิกัดสัมพันธ์กับมุมซ้ายบนของหน้าการแสดงผลทั้งหมด (รวมถึงชิ้นส่วนที่ซ่อนโดยการเลื่อน)

ในขณะที่clientX/Yพิกัดสัมพันธ์กับมุมบนซ้ายของส่วนที่มองเห็นของหน้า "เห็น" ผ่านหน้าต่างเบราว์เซอร์

ดูตัวอย่าง

คุณอาจไม่ต้องการ screenX/Y


21
เจ๋งขอบคุณสำหรับการสาธิตอธิบายได้ดีกว่าข้อความ
ราหุลประสาท

ฉันชอบคำอธิบายของ @ SimoEndre ที่ดีที่สุด
ปิแอร์

9
สนใจที่จะเห็นภาพscreenX/Yคืออะไร?
ayjay

1
ฉันต้องการผูกกิจกรรมการคลิกในพื้นที่สี่เหลี่ยมเฉพาะบนหน้าดังนั้นpageX/pageYควรใช้แทนclientX/clientYหรือไม่
techie_28

1
x และ y แบบง่ายคืออะไร? พวกเขาดูเหมือนลูกค้า X / Y เมื่อฉันลอง แต่ฉันไม่พบการอ้างอิงที่ชัดเจนเกี่ยวกับมัน
โจวจิ

117
  1. pageX / Yให้พิกัดที่เกี่ยวข้องกับ<html>องค์ประกอบใน CSS พิกเซล
  2. clientX / Yให้พิกัดที่เกี่ยวข้องกับviewportในพิกเซล CSS
  3. screenX / Yให้พิกัดที่สัมพันธ์กับscreenพิกเซลของอุปกรณ์

เกี่ยวกับคำถามสุดท้ายของคุณถ้าการคำนวณมีความคล้ายคลึงกันบนเดสก์ทอปและเบราว์เซอร์มือถือ ... เพื่อความเข้าใจที่ดีกว่า - เบราว์เซอร์บนมือถือ - เราต้องแยกความแตกต่างทั้งสองแนวคิดใหม่ที่: วิวพอร์ตรูปแบบและวิวพอร์ตภาพ วิวพอร์ตการมองเห็นเป็นส่วนหนึ่งของหน้าเว็บที่แสดงบนหน้าจอในปัจจุบัน เค้าโครงวิวพอร์ตมีความหมายเหมือนกันสำหรับหน้าเต็มรูปแบบที่แสดงบนเบราว์เซอร์เดสก์ท็อป (ด้วยองค์ประกอบทั้งหมดที่ไม่สามารถมองเห็นได้ในวิวพอร์ตปัจจุบัน)

บนเบราว์เซอร์มือถือpageXและpageYยังคงสัมพันธ์กับหน้าเว็บในพิกเซลพิกเซลเพื่อให้คุณสามารถรับพิกัดเมาส์เทียบกับหน้าเอกสาร บนมืออื่น ๆ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มีเอกสารที่ยอดเยี่ยมเกี่ยวกับความแตกต่างของเบราว์เซอร์เกี่ยวกับมาตรฐาน W3C เช่นกิจกรรม DOM และ JavaScript


4
คำตอบของคุณดี แต่มันจะล้าสมัยเร็ว ๆ นี้quirksmode.org/mobile/tableViewport_desktop.html
ด่าน
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.