Tôi có một điều khiển Hình ảnh và tôi cần đặt một số phần tử lên trên điều khiển hình ảnh. khi tôi sử dụng getBoundingClientRect() nó đang làm việc trong IE (7,8 và 9) nhưng nó được đưa ra giá trị khác nhau trong Firefox và Chrome. Có chức năng nào khác để nhận hình chữ nhật Bounding của một phần tử không?lý do tại sao getBoundingClientRect cung cấp các giá trị khác nhau trong IE và Firefox
Trả lời
lời trích dẫn từ tài liệu IE cũ cho getBoundingClientRect
: "Trong Microsoft® Internet Explorer 5, phía trên bên trái của cửa sổ là 2,2 (pixel) đối với với khách hàng thực sự. " Điều này vẫn có vẻ hợp lệ.
Khi sử dụng IE9, <meta http-equiv="x-ua-compatible" content="ie=edge"/>
"đặt" góc trên bên trái thành vị trí đúng (0,0).
Khi d4rkpr1nc3 trả lời, bạn có thể nhận các giá trị đó theo các phương pháp khác, nhưng kết quả cũng phụ thuộc vào trình duyệt được sử dụng. Tôi nghĩ bạn sẽ cần một cách tiếp cận hơi khác so với vấn đề này. Kiểm tra mã dưới đây, nó có thể cung cấp cho bạn một số ý tưởng.
<DIV id="imagecontrol" style="position:absolute;width:200px;height:200px;">
<DIV id="topleft" style="position:absolute;width:100px;height:100px;left:0px;top:0px;"></DIV>
<DIV id="topright" style="position:absolute;width:100px;height:100px;right:0px;top:0px;"></DIV>
<DIV id="bottomleft" style="position:absolute;width:100px;height:100px;left:0px;bottom:0px;"></DIV>
<DIV id="bottomright" style="position:absolute;width:100px;height:100px;right:0px;bottom:0px;"></DIV>
</DIV>
Bạn có thể sử dụng offsets để làm điều đó, như thế này:
var top = element.offsetTop;
var left = element.offsetLeft;
var width = element.offsetWidth;
var height = element.offsetHeight;
var bottom = top + height;
var right = left + width;
Không thực sự. Ví dụ, 'getBoundingClientRect' tính đến việc chuyển đổi CSS tài khoản. – tillda
Thực tế không: offsetTop là vị trí tương đối với cha mẹ định vị nếu có, vì vậy bất kỳ bậc cha mẹ nào có vị trí: relative/fixed/absolute sẽ ảnh hưởng đến giá trị offset (so với giá trị offset từ domcument.body.) – dougwig
Điều này giải quyết được một vấn đề cho tôi khi chúng tôi đang cố gắng sử dụng 'range.getBoundingClient()' từ một iFrame ẩn và Firefox & IE đã trả về tất cả các số không (0) cho x/y/width/height. @ d4rkpr1nc3 thx! –
Các giá trị có thể hơi khác nhau trong các trình duyệt khác nhau nhưng getBoundingClientRect()
vẫn là lựa chọn tốt nhất của bạn cho hiệu suất và độ chính xác. Tuy nhiên, các tọa độ mà nó trả về liên quan đến khung nhìn chứ không phải tài liệu, do đó bạn sẽ cần phải tính toán điều đó bằng cách sử dụng các giá trị cuộn trên cửa sổ/tài liệu.
Dưới đây là một bài đăng blog tốt về điều này:
David Mark là tốt về công cụ này. Đây là một mẹo của mình từ comp.lang.javascript:
https://groups.google.com/forum/?fromgroups#!topic/comp.lang.javascript/zWJaFM5gMIQ
- 1. Firefox và Chrome cung cấp các giá trị khác nhau cho offsetTop
- 2. Tại sao UserPrincipal.Enabled trả về các giá trị khác nhau?
- 3. Tại sao đối tượng javascript hiển thị các giá trị khác nhau trong bảng điều khiển trong Chrome, Firefox, Safari?
- 4. Java: Múi giờ lý do tại sao múi giờ khác nhau cho cùng một giá trị bằng millisec
- 5. lý do tại sao: khác không (khác) trong clojure?
- 6. Tại sao Chrome, Firefox và IE đều hiển thị các điều khiển SELECT có chiều rộng cố định khác nhau?
- 7. Tại sao HashMap lại phục hồi mã băm do đối tượng khóa cung cấp?
- 8. Tại sao C# gọi khác nhau cho các phương thức quá tải cho các giá trị khác nhau cùng loại?
- 9. Tại sao hashlib và hmac lại tạo ra các giá trị băm khác nhau?
- 10. lý do tại sao cùng một màu sắc trông khác nhau trên các thiết bị Android khác nhau
- 11. Tại sao các Nút và Phần tử khác nhau trong XML? Lý do cơ bản là gì?
- 12. Tại sao hàm C++ stdlib rand() cung cấp các giá trị khác nhau cho cùng một hạt giống trên các nền tảng?
- 13. Xử lý xác thựcResult từ các nhà cung cấp khác nhau trong cùng một trang
- 14. Chế độ tài liệu IE có các giá trị mặc định khác nhau trên các máy chủ khác nhau
- 15. Sự khác biệt giữa các phương thức onKey(), OnKeyDown() và dispatchKeyEvent() do Android cung cấp?
- 16. Tại sao lambdas trong C# dường như xử lý các giá trị trả về boolean khác nhau?
- 17. Tại sao chế độ xem được liên kết cung cấp các kết quả khác nhau từ MS Access và Trình quản lý SQL?
- 18. lý do tại sao memcached?
- 19. Sử dụng bảng để cung cấp các giá trị enum trong MySQL?
- 20. Tại sao giá trị mặc định cho max_features trong RandomForestClassifier khác với giá trị trong RandomForestRegressor?
- 21. Cách getComputedTextLength() đưa ra các kết quả khác nhau trong Chrome và Firefox?
- 22. Có lý do tại sao System dll khác với Silverlight và các thư viện C#
- 23. Khác biệt trong JSON.stringify của các giá trị ngày trong các trình duyệt khác nhau
- 24. Cung cấp giá trị Ngày giờ trong OData
- 25. Tại sao các loại giá trị không thể là rỗng
- 26. Tại sao Encoding.Default.GetBytes() trả về các kết quả khác nhau trong VB.NET và C#?
- 27. lý do tại sao ObjectDataSource không gửi giá trị thông số chính xác?
- 28. Tại sao đầu ra khác nhau?
- 29. Tại sao các nhà cung cấp DB lớn không cung cấp các API không đồng bộ thực sự?
- 30. Cung cấp các tệp php từ các vị trí khác nhau trong nginx
làm thế nào để bạn nhận được ie8 để cung cấp cho các giá trị giống như chrome? – SuperUberDuper
@SuperUberDuper Ý tưởng về câu trả lời của tôi là, có thể bạn không thể. Các mô hình bố trí là dfferent trong các trình duyệt khác nhau, đặc biệt là trong những cái cũ như IE8. Tuy nhiên, bạn có thể làm toán với giá trị, nhưng tốt hơn nên đặt câu hỏi của riêng bạn về cách thực hiện điều đó. – Teemu
ok cảm ơn !!!!!!! – SuperUberDuper