Bối cảnh: Tôi hiện đang làm việc trên một dự án mà ứng dụng JS của tôi được nhúng vào nhiều ứng dụng JS (cha mẹ) khác. Một số ứng dụng mẹ có thể hiển thị/ẩn ứng dụng của tôi bằng cách đặt hiển thị: chặn/không cho một số yếu tố chứa ứng dụng của tôi. Các ứng dụng mẹ khác tạm thời xóa ứng dụng của tôi khỏi DOM và kết nối lại sau. Rất ít ứng dụng mẹ sử dụng shadow dom, vì vậy tôi không có quyền truy cập vào các phần tử trong ứng dụng mẹ.getBoundingClientRect để phát hiện khả năng hiển thị
Tôi cần cách kiểm tra xem ứng dụng của tôi có hiển thị hay không vào getBoundingClientRect.
Câu hỏi: Ít nhất trên chrome, getBoundingClientRect lợi nhuận (w: 0, h: 0, l: 0, t: 0) nếu một yếu tố hoặc tổ tiên của nó có display: none hoặc nếu nó được lấy ra từ DOM. Tôi không thể tìm thấy bất kỳ tài liệu nào về bảo đảm hành vi này, và tôi tự hỏi, nếu nó an toàn (theo nghĩa logic này sẽ không thay đổi) để sử dụng getBoundingClientRect để kiểm tra khả năng hiển thị của một phần tử.
Ngoài ra tôi cần biết hành vi này có nhất quán trên tất cả các trình duyệt chính, bao gồm FF, IE8 + và Safari không. Tài liệu này có ở bất kỳ đâu không?
Cuối cùng, tại sao (0,0,0,0)? Tôi cảm thấy như getBoundingClientRect phải trả về null trong các trường hợp như vậy (0,0,0,0) thực sự có nghĩa là một cái gì đó khác nhau. Có lý do chính đáng cho điều đó không?
Edited/Câu hỏi bổ sung: Cảm ơn istos đã chỉ ra rằng trở rỗng có thể phá vỡ một số mã không nghi ngờ, chẳng hạn như:
console.log(clientRectObject.height);
// TypeError: Cannot read property 'height' of null
Không để khiếu nại về việc vi hiện tại, mà là một câu hỏi thiết kế: thay vì null, có thể trả về một số giá trị Rect bất hợp pháp (chẳng hạn như chiều rộng và chiều cao tiêu cực) là một lựa chọn hữu ích hơn?
Cảm ơn istos về các liên kết và giải thích bổ sung! – haejeong87
Về IE8 - _ "chiều rộng và chiều cao bị thiếu trong IE8, do đó tính toán theo cách thủ công" _: https://github.com/twbs/bootstrap/commit/eaf21ec21d260ff7ed1e5b54e5185de235ff7034 – istos