Sự khác biệt giữa screenX / Y, clientX / Y và pageX / Y là gì?


581

Sự khác biệt giữa screenX/ Y, clientX/ YpageX/ là Ygì?

Ngoài ra đối với iPad Safari, các tính toán có giống như trên máy tính để bàn hay HOẶC có một số khác biệt do chế độ xem không?

Sẽ thật tuyệt nếu bạn có thể chỉ cho tôi một ví dụ.


2
Một bản demo khác sử dụng năm thuộc tính khác nhau (màn hình, máy khách, trang, lớp, offset) để lấy tọa độ chuột.
akinuri

Câu trả lời:


504

Trong JavaScript:

pageX, pageY, screenX, screenY, clientX, Và clientYtrả về một số trong đó cho biết số vật lý “pixel CSS” một điểm là từ điểm tham chiếu. Điểm sự kiện là nơi người dùng nhấp vào, điểm tham chiếu là một điểm ở phía trên bên trái. Các thuộc tính này trả về khoảng cách ngang và dọc từ điểm tham chiếu đó.

pageXpageY:
Liên quan đến phía trên bên trái của khu vực nội dung được hiển thị đầy đủ trong trình duyệt. Điểm tham chiếu này nằm dưới thanh URL và nút quay lại ở phía trên bên trái. Điểm này có thể là bất cứ nơi nào trong cửa sổ trình duyệt và thực sự có thể thay đổi vị trí nếu có các trang có thể cuộn được nhúng trong các trang và người dùng di chuyển một thanh cuộn.

screenXscreenY:
Liên quan đến phía trên bên trái của màn hình / màn hình vật lý, điểm tham chiếu này chỉ di chuyển nếu bạn tăng hoặc giảm số lượng màn hình hoặc độ phân giải màn hình.

clientXclientY:
Liên quan đến cạnh trên bên trái của khu vực nội dung ( khung nhìn ) của cửa sổ trình duyệt. Điểm này không di chuyển ngay cả khi người dùng di chuyển một thanh cuộn từ bên trong trình duyệt.

Đối với một hình ảnh mà trình duyệt hỗ trợ các thuộc tính:

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

w3schools có trình thông dịch và trình soạn thảo Javascript trực tuyến để bạn có thể xem những gì từng làm

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
và trong jquery offsetX và offsetY có liên quan đến thùng chứa mẹ
Muhammad Umer

2
Liên kết đến w3schools dường như chỉ có sẵn trong phần tham khảo bây giờ: w3schools.com/jsref/tryit.asp?filename=try_dom_event_clientxy
hợp lệ

1
Tôi nghĩ rằng đó là một lời giải thích sai lệch hoặc ít nhất là không hiệu quả cho pageX / pageY (và do đó, câu hỏi) bởi vì nó làm tham chiếu đến thanh URL và nút quay lại trong khi nó được giải thích tốt hơn về nội dung trang như trong phần giải thích trực quan Trả lời cho biết. Ngoài ra, ví dụ w3schools không hữu ích vì nó chỉ xuất ra một cặp x / y và không có cuộn nào chứng minh sự khác biệt.
Robert Monfera

4
Giải thích về PageX / PageY & ClientX / clientY được hoán đổi cho nhau. bạn nên sửa nó nó gây hiểu lầm
Navpreet Kaur

1
Tôi nghĩ @NavpreetKaur đã đúng. Câu trả lời này khiến nó trái ngược về clientX so với pageX
zhouji

496

Đây là một hình ảnh giải thích sự khác biệt giữa pageYclientY.

pageY vs khách hàng

Tương tự cho pageXclientX, tương ứng.


pageX/Y tọa độ có liên quan đến góc trên cùng bên trái của toàn bộ trang được hiển thị (bao gồm các phần bị ẩn bằng cách cuộn),

trong khi clientX/Ytọa độ tương đối với góc trên cùng bên trái của phần hiển thị của trang, "nhìn thấy" thông qua cửa sổ trình duyệt.

Xem bản demo

Có lẽ bạn sẽ không bao giờ cần screenX/Y


21
Tuyệt vời, Cảm ơn Demo, giải thích tốt hơn văn bản.
Rahul Prasad

Tôi thích cách giải thích của @ SimoEndre là tốt nhất
Pierre

9
quan tâm để hình dung những gì screenX/Ylà?
ayjay

1
Tôi muốn liên kết một sự kiện nhấp chuột trên một khu vực hình chữ nhật cụ thể trên trang vì vậy pageX/pageYnên được sử dụng thay vì clientX/clientY?
techie_28

1
Còn x và y đơn giản thì sao? Chúng có vẻ giống như clientX / Y khi tôi dùng thử nhưng tôi không tìm thấy tài liệu tham khảo chính xác nào về nó
zhouji

117
  1. pageX / Y cung cấp tọa độ tương đối với <html>phần tử trong pixel CSS.
  2. clientX / Y cung cấp tọa độ tương ứng với các viewportpixel CSS.
  3. screenX / Y cung cấp tọa độ tương ứng với các screenpixel trong thiết bị.

Về câu hỏi cuối cùng của bạn nếu tính toán tương tự trên trình duyệt máy tính để bàn và thiết bị di động ... Để hiểu rõ hơn - trên trình duyệt di động - chúng tôi cần phân biệt hai khái niệm mới: chế độ xem bố cụcchế độ xem trực quan . Chế độ xem trực quan là một phần của trang hiện đang được hiển thị trên màn hình. Chế độ xem bố cục là từ đồng nghĩa cho toàn bộ trang được hiển thị trên trình duyệt máy tính để bàn (với tất cả các yếu tố không hiển thị trên chế độ xem hiện tại).

Trên các trình duyệt di động, pageXpageYvẫn tương đối với trang bằng pixel CSS để bạn có thể có được tọa độ chuột so với trang tài liệu. Mặt khác clientXclientYxác định tọa độ chuột liên quan đến chế độ xem trực quan .

Có một luồng stackoverflow khác ở đây liên quan đến sự khác biệt giữa chế độ xem trực quan và chế độ xem bố cục: Sự khác biệt giữa chế độ xem trực quan và chế độ xem bố cục?

Một tài nguyên tốt khác: http://www.quirksmode.org/mobile/viewports2.html


27

Điều giúp tôi là thêm một sự kiện trực tiếp vào trang này và tự mình bấm vào! Mở bảng điều khiển của bạn trong các công cụ dành cho nhà phát triển / Fireorms, v.v. và dán cái này:

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

Với đoạn mã này, bạn có thể theo dõi vị trí nhấp của mình khi bạn cuộn, di chuyển cửa sổ trình duyệt, v.v.

Lưu ý rằng pageX / Y và clientX / Y giống nhau khi bạn cuộn toàn bộ lên đầu!


5

Sự khác biệt giữa những thứ đó sẽ phụ thuộc phần lớn vào trình duyệt mà bạn hiện đang đề cập đến. Mỗi người thực hiện các tính chất này khác nhau, hoặc hoàn toàn không. Quirksmode có tài liệu tuyệt vời về sự khác biệt của trình duyệt liên quan đến các tiêu chuẩn W3C như DOM và JavaScript Sự kiện.


4
Câu trả lời của bạn là tốt, nhưng nó sẽ sớm trở nên lỗi thời quirksmode.org/mobile/tableViewport_desktop.html
Dan
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.