Có cách nào đơn giản để xác định tất cả các phần tử DOM "che" (nghĩa là, nằm trong ranh giới của nó) pixel với cặp tọa độ X/Y không?Định vị phần tử DOM theo tọa độ tuyệt đối
Trả lời
Bạn có thể xem document.elementFromPoint
mặc dù tôi không biết trình duyệt nào hỗ trợ nó.
Firefox và Chrome có. It is also in the MSDN, nhưng tôi không quen thuộc với tài liệu này vì vậy tôi không biết trong đó phiên bản IE được bao gồm.
Cập nhật:
Để tìm tất cả các yếu tố đó là bằng cách nào đó tại vị trí này, bạn có thể làm cho các giả định rằng tất cả các yếu tố cũng của cha mẹ đang ở vị trí này. Tất nhiên điều này không làm việc với các yếu tố vị trí tuyệt đối.
elementFromPoint
sẽ chỉ cung cấp cho bạn yếu tố phía trước nhất. Để thực sự tìm thấy những người khác, bạn sẽ phải đặt display
của phần tử phía trước nhất thành none
và sau đó chạy lại chức năng. Nhưng người dùng có lẽ sẽ nhận thấy điều này. Bạn sẽ phải thử.
@Felix Kling Điều này nghe có vẻ giống như một cách để đi, tôi sẽ kiểm tra tính tương thích của trình duyệt. –
@etranger - FF <3.0 không chắc chắn. Khác hơn là nó không phải là xấu: http://www.quirksmode.org/dom/w3c_cssom.html#documentview – galambalazs
@galambalazs: Oh nó đã được trong bảng CSS ... Tôi chỉ có một cái nhìn tại bảng DOM. –
tôi không thể ngăn bản thân mình để nhảy về câu trả lời Felix Kling của:
var $info = $('<div>', {
css: {
position: 'fixed',
top: '0px',
left: '0px',
opacity: 0.77,
width: '200px',
height: '200px',
backgroundColor: '#B4DA55',
border: '2px solid black'
}
}).prependTo(document.body);
$(window).bind('mousemove', function(e) {
var ele = document.elementFromPoint(e.pageX, e.pageY);
ele && $info.html('NodeType: ' + ele.nodeType + '<br>nodeName: ' + ele.nodeName + '<br>Content: ' + ele.textContent.slice(0,20));
});
cập nhật: background-color!
Làm điều đó trên mỗi 'mousemove' là khá nhiều một * CPU overkill *. Chưa kể OP chưa bao giờ nói về những gì anh ta muốn sử dụng nó. – galambalazs
@galambalazs: đừng coi nó quá nghiêm trọng.Tuy nhiên, tải CPU của tôi không vượt quá 20%, nhưng hãy đặt cân bằng 'clearTimeout' /' setTimeout' xung quanh trình xử lý mousemove bên trong;) – jAndy
này không được công việc (fiddle):
$(document).click(function(e) {
var hitElements = getHitElements(e);
});
var getHitElements = function(e) {
var x = e.pageX;
var y = e.pageY;
var hitElements = [];
$(':visible').each(function() {
var offset = $(this).offset();
if (offset.left < x && (offset.left + $(this).outerWidth() > x) && (offset.top < y && (offset.top + $(this).outerHeight() > y))) {
hitElements.push($(this));
}
});
return hitElements;
}
Khi sử dụng :visible
, bạn nên lưu ý điều này:
Elements với visibility: hidden hoặc opacity: 0 được coi là có thể nhìn thấy, vì họ vẫn tiêu thụ không gian trong bố cục. Trong hoạt ảnh ẩn phần tử, phần tử được coi là hiển thị cho đến khi kết thúc hoạt ảnh. Trong quá trình hoạt ảnh để hiển thị phần tử, phần tử là được coi là hiển thị khi bắt đầu hoạt ảnh.
Vì vậy, dựa trên nhu cầu của bạn, bạn sẽ muốn loại trừ các yếu tố visibility:hidden
và opacity:0
.
- 1. Lấy tọa độ tuyệt đối để quay các phần tử SVG của Inkscape
- 2. CSS - Định vị tuyệt đối hoặc nổi?
- 3. Vị trí cố định: phần tử tuyệt đối trong phần thừa: phần tử cuộn khi cuộn
- 4. Tọa độ tuyệt đối của UIElement trong WinRT
- 5. Clip CSS và Định vị Tuyệt đối
- 6. Định vị SVG như vị trí: tuyệt đối
- 7. Tọa độ tài liệu jQuery x y của đối tượng DOM
- 8. Định vị tuyệt đối bên trong vị trí tương đối?
- 9. Vị trí CSS tuyệt đối đối với phần tử cha mẹ hoạt động tương đối
- 10. vị trí: tuyệt đối, div theo div
- 11. Đối tượng jQuery và phần tử DOM
- 12. nhận tọa độ X và Y cho phần tử div
- 13. Vị trí CSS tuyệt đối và chiều rộng của vùng chứa mẹ theo phần trăm
- 14. Định vị tuyệt đối trong email gmail
- 15. vị trí tuyệt đối được xoay phần sang góc phải
- 16. Tìm các phần tử theo vị trí offset với jQuery
- 17. Bắt vị trí tuyệt đối của một phần tử liên quan đến trình duyệt
- 18. Bắt tọa độ của một phần tử trên trang cuộn
- 19. TimeZone theo Tọa độ
- 20. Làm cách nào để định vị phần tử bên dưới phần tử vị trí tương đối mà không chồng chéo?
- 21. Cách định vị JLabels đến vị trí tuyệt đối trên Java GUI
- 22. Cách tìm phần tử trong Xem theo tọa độ x, y Android
- 23. Thay thế các phần tử trong ma trận theo các tọa độ trong MATLAB
- 24. Tìm một phần tử trong SVG trong Opera theo tọa độ
- 25. Android: Thay đổi vị trí tuyệt đối của chế độ xem theo chương trình
- 26. Lấy phần tử tại vị trí đã chỉ định - JavaScript
- 27. Định vị tuyệt đối: Một phần tử mở rộng cửa sổ, phần tử khác không ảnh hưởng đến nó. Cả hai đều sử dụng cùng một mã: C
- 28. Không gian dọc trên các phần tử có vị trí: tuyệt đối
- 29. IE8 và IE9: trước và sau khi các phần tử vị trí tuyệt đối bị ẩn
- 30. Làm cách nào để tìm vị trí tuyệt đối của một phần tử bằng jQuery?
Bạn có thể nhận được câu trả lời hợp lý từ câu hỏi này: http://stackoverflow.com/questions/48999/getting-div-id-based-on-x-y-position – Orbling
Bạn có nghĩa là có nhiều hơn một phần tử? (bạn muốn tất cả các chồng chéo để được tính toán quá?) – galambalazs
Hãy xem nếu giải pháp này giúp bạn ra http://jsfiddle.net/eyxt2tt1/2/ kịch bản có thể phát hiện nếu các yếu tố DOM của bạn nằm trong một tập hợp các phối hợp. – GibboK