Cho hai phần tử HTML A và B trong cùng một tài liệu, làm cách nào tôi có thể tìm ra phần tử nào "gần hơn" với người dùng (tức là nếu chúng chồng lên nhau, cái nào che khuất)?So sánh các phần tử HTML theo z-index thực tế
Các W3C CSS Specification mô tả ngữ cảnh xếp chồng, mà công cụ hiển thị tuân thủ sẽ thực hiện. Tuy nhiên, tôi không thể tìm cách truy cập thông tin này trong chương trình JavaScript, trình duyệt chéo hay không. Tất cả những gì tôi có thể đọc là thuộc tính css z-index
, mà mọi người không nói nhiều, vì phần lớn thời gian được đặt thành auto
hoặc, ngay cả khi được biểu thị dưới dạng giá trị số, không phải là chỉ báo đáng tin cậy về cách hiển thị thực sự (nếu chúng thuộc về các bối cảnh thống kê khác nhau, so sánh chỉ mục z là không liên quan).
Xin lưu ý rằng tôi quan tâm đến các yếu tố tùy ý: nếu cả hai yếu tố bên dưới con trỏ chuột, chỉ một phần tử được coi là "di chuột", vì vậy tôi có thể dễ dàng tìm thấy con gần nhất trong trường hợp này. Tuy nhiên, tôi đang tìm một giải pháp tổng quát hơn, tốt nhất là giải pháp không liên quan đến việc triển khai lại thuật toán xếp chồng mà công cụ hiển thị đã thực hiện.
Cập nhật: hãy để tôi làm rõ một chút lý do đằng sau câu hỏi này: Gần đây tôi đã giải quyết a question rằng tiếp xúc với một hạn chế trong cơ chế kéo và thả jQuery - nó không mất z-chỉ số vào tài khoản khi thả, vì vậy nếu một phần tử đang che khuất một phần tử khác, nó vẫn có thể thực hiện thao tác thả trong phần tử "đằng sau". Trong khi câu hỏi được liên kết được trả lời cho trường hợp đặc biệt OP, vấn đề chung vẫn tồn tại và không có giải pháp dễ dàng nào mà tôi biết.
alex's answer dưới đây là hữu ích, nhưng không đủ đối với trường hợp trong tầm tay: khi kéo, yếu tố kéo bản thân (hay chính xác hơn helper của nó) là yếu tố trên cùng dưới con trỏ chuột, vì vậy elementFromPoint
sẽ trở lại nó thay vì tiếp theo yếu tố trên cùng mà chúng tôi thực sự cần (giải pháp thay thế:style the cursor do đó nó được đặt bên ngoài trình trợ giúp). Các chiến lược giao nhau khác mà jQuery sử dụng cũng đưa vào tài khoản nhiều hơn một điểm, làm phức tạp nhiệm vụ xác định phần tử trên cùng giao cắt người trợ giúp bằng cách nào đó. Việc có thể so sánh (hoặc sắp xếp) các yếu tố theo chỉ số z thực tế sẽ làm cho chế độ giao lộ "z-index aware" khả thi cho trường hợp chung.
Tôi sẽ kiểm tra mã của bạn cẩn thận hơn khi tôi có thời gian, nhưng ngay từ cái nhìn đầu tiên có vẻ như là tốt. Tôi chấp nhận câu trả lời của bạn ngay bây giờ, vì đó là câu trả lời hoàn chỉnh nhất cho đến nay. – mgibsonbr