2012-02-24 22 views
8

Cách tốt nhất để có được chiều cao trang thực tế (không phải cửa sổ) trong JS là tương thích giữa các trình duyệt?Nhận chiều cao trang bằng JS (Cross-Browser)

Tôi đã nhìn thấy một vài cách nhưng tất cả đều trở về giá trị khác nhau ...

self.innerHeight hoặc document.documentElement.clientHeight hoặc document.body.clientHeight hay cái gì khác?

Một cách để làm việc đó mà dường như để làm việc là:

var body = document.body, 
    html = document.documentElement; 

var height = Math.max(body.scrollHeight, body.offsetHeight, 
         html.clientHeight, html.scrollHeight, html.offsetHeight); 
+1

thể trùng lặp của [Get chiều cao của toàn bộ tài liệu với JavaScript] (http: // stackoverflow .com/questions/1145850/get-height-of-toàn-tài liệu-với-javascript) –

+0

Điều đó nên làm điều đó. Cảm ơn Felix. –

+1

Bạn có khả năng sử dụng jquery không? Nếu vậy, câu trả lời ở đây có thể làm cho bạn một số tốt: http://stackoverflow.com/a/1304384/104435 – soniiic

Trả lời

0

Hãy thử điều này mà không cần jQuery

//Get height 
var myWidth = 0, myHeight = 0; 
if (typeof (window.innerWidth) == 'number') { 
    myWidth = window.innerWidth; 
    myHeight = window.innerHeight; 
} else if (document.documentElement && (document.documentElement.clientWidth || document.documentElement.clientHeight)) { 
    myWidth = document.documentElement.clientWidth; 
    myHeight = document.documentElement.clientHeight; 
} else if (document.body && (document.body.clientWidth || document.body.clientHeight)) { 
    myWidth = document.body.clientWidth; 
    myHeight = document.body.clientHeight; 
} 

Hy vọng điều này sẽ giúp bạn.

+0

Đã thử rằng hiện tại trong firebug trên trang này cụ thể trả về 456px chiều cao đó là không chính xác ... –

+0

@ e-bacho2.0 Hãy thử một lần nữa, và bật ra cửa sổ firebug của bạn. Tôi nhận được cùng một giá trị như '$ (cửa sổ) .height();' <= đây là jQuery (và đó là chính xác) '705' trong cả hai trường hợp. –

1
var width = window.innerWidth || 
      html.clientWidth || 
      body.clientWidth || 
      screen.availWidth; 

var height = window.innerHeight || 
      html.clientHeight || 
      body.clientHeight || 
      screen.availHeight; 

Nên là một cách tốt đẹp để thực hiện điều đó.

+0

Không hoạt động ... Giải pháp duy nhất mà tôi đã tìm thấy cho đến nay và nó hoạt động chính xác là một trong đó là trong câu hỏi của tôi. –

+0

Vâng, tôi không biết làm thế nào bạn đang thử nghiệm nó ... nhưng tôi chạy điều này trong tất cả các trình duyệt chính của trình duyệt (Chrome, Firefox, Opera, IE9 +) js giao diện điều khiển, và nó hoạt động hoàn toàn tốt đẹp. – Jonas

+1

ty cho giải pháp không jquery –

4

Trang/Chiều cao tài liệu hiện đang chịu sự triển khai của nhà cung cấp (IE/Moz/Apple/...) và không có trình duyệt chéo kết quả chuẩn và nhất quán.

Nhìn vào phương thức JQuery .height();

if (jQuery.isWindow(elem)) { 
      // Everyone else use document.documentElement or document.body depending on Quirks vs Standards mode 
      // 3rd condition allows Nokia support, as it supports the docElem prop but not CSS1Compat 
      var docElemProp = elem.document.documentElement[ "client" + name ], 
       body = elem.document.body; 
      return elem.document.compatMode === "CSS1Compat" && docElemProp || 
       body && body[ "client" + name ] || docElemProp; 

     // Get document width or height 
     } else if (elem.nodeType === 9) { 
      // Either scroll[Width/Height] or offset[Width/Height], whichever is greater 
      return Math.max(
       elem.documentElement["client" + name], 
       elem.body["scroll" + name], elem.documentElement["scroll" + name], 
       elem.body["offset" + name], elem.documentElement["offset" + name] 
      ); 

nodeType === 9 bình DOCUMENT_NODE: http://www.javascriptkit.com/domref/nodetype.shtml nên không có mã số giải pháp JQuery nên trông giống như:

var height = Math.max(
        elem.documentElement.clientHeight, 
        elem.body.scrollHeight, elem.documentElement.scrollHeight, 
        elem.body.offsetHeight, elem.documentElement.offsetHeight) 
+0

Bạn đang đăng câu trả lời giống như Amar. Bạn có thể vui lòng chạy mã đó trong firebug, cảnh báo chiều cao và cho tôi biết nếu kết quả là chính xác? –

+0

Giải pháp Amar và trước đây tôi áp dụng cho đối tượng trình duyệt "cửa sổ". – Krilivye

Các vấn đề liên quan