Nhận chiều cao và chiều rộng của khung nhìn trình duyệt mà không có thanh cuộn bằng jquery?


97

Làm cách nào để lấy chiều cao và chiều rộng của khung nhìn trình duyệt mà không cần thanh cuộn bằng jQuery?

Đây là những gì tôi đã thử cho đến nay:

       var viewportWidth = $("body").innerWidth();
       var viewportHeight = $("body").innerHeight();

Giải pháp này không tính đến các thanh cuộn của trình duyệt.


Câu trả lời:


159
$(window).height();
$(window).width();

Thêm thông tin

Tuy nhiên, sử dụng jQuery không cần thiết để nhận được những giá trị đó. Sử dụng

document.documentElement.clientHeight;
document.documentElement.clientWidth;

để nhận kích thước không bao gồm thanh cuộn hoặc

window.innerHeight;
window.innerWidth;

để có được toàn bộ khung nhìn, bao gồm cả thanh cuộn.

document.documentElement.clientHeight <= window.innerHeight;  // is always true

cảm ơn Kyle, điều này không bao gồm thanh cuộn của trình duyệt, phải không?
Yetimwork Beyene

từ những gì tôi hiểu về nó, 'khung nhìn' của trình duyệt là bất cứ thứ gì có thể xem được, và vì thanh cuộn không thể có nội dung trên đó nên tôi sẽ cho rằng đó không phải là một phần của phép tính. Tuy nhiên, điều này có thể thay đổi tùy thuộc vào cách các tác giả trình duyệt triển khai nó.
Kyle

4
khung nhìn không có nghĩa là toàn bộ chiều rộng / chiều cao của cửa sổ trang web, nó chỉ là khung nhìn, hãy sử dụng một cái gì đó như `` window.innerHeight; window.innerWidth; `` '
acidjazz

@Kyle Bạn hoàn toàn chính xác, như đã nêu ở đây: w3schools.com/css/css_rwd_viewport.asp Chế độ xem là vùng hiển thị của người dùng trên một trang web.
Brad Adams

1
Chiều cao (tính bằng pixel) của khung nhìn cửa sổ trình duyệt bao gồm thanh cuộn ngang, nếu được hiển thị. . Nguồn: developer.mozilla.org/en-US/docs/Web/API/Window/innerHeight
marson parulian

35

Không sử dụng jQuery, chỉ sử dụng javascript để có kết quả chính xác:

Điều này bao gồm chiều rộng / chiều cao của thanh cuộn:

var windowWidth = window.innerWidth;
var windowHeight = window.innerHeight;

alert('viewport width is: '+ windowWidth + ' and viewport height is:' + windowHeight);

Điều này không bao gồm chiều rộng / chiều cao của thanh cuộn:

var widthWithoutScrollbar = document.body.clientWidth;
var heightWithoutScrollbar = document.body.clientHeight;

alert('viewport width is: '+ widthWithoutScrollbar + ' and viewport height is:' + heightWithoutScrollbar);


Cảm ơn bạn, các phương thức jQuery innerWidth và innerHeight thực sự trả về kết quả không chính xác.
jck

console.log (window.innerHeight); console.log (document.body.clientHeight); console.log ($ (window) .height ()); Cuối cùng là không chính xác. Giải pháp của bạn là tốt nhất cho tôi. Cảm ơn.
Ali

25

Đây là một JS chung sẽ hoạt động trong hầu hết các trình duyệt (FF, Cr, IE6 +):

var viewportHeight;
var viewportWidth;
if (document.compatMode === 'BackCompat') {
    viewportHeight = document.body.clientHeight;
    viewportWidth = document.body.clientWidth;
} else {
    viewportHeight = document.documentElement.clientHeight;
    viewportWidth = document.documentElement.clientWidth;
}

điều này chỉ làm việc cho tôi. cửa sổ. chiều cao là cho một cái gì đó mà tôi không thể tính toán bất kỳ như thế nào.
Amit Kumar Gupta

11

Bạn đang sử dụng các cuộc gọi phương thức sai. Chế độ xem là "cửa sổ" mở trên tài liệu: bạn có thể xem bao nhiêu và ở đâu.

Việc sử dụng $(window).height()sẽ không cung cấp cho bạn kích thước khung nhìn mà nó sẽ cung cấp cho bạn kích thước của toàn bộ cửa sổ, thường là kích thước của toàn bộ tài liệu mặc dù tài liệu có thể còn lớn hơn.

Để có được kích thước của việc sử dụng khung nhìn thực tế window.innerHeightwindow.innerWidth.

https://gist.github.com/bohman/1351439

Không sử dụng các phương thức jQuery, ví dụ $(window).innerHeight(), vì các phương thức này cung cấp các số sai. Họ cung cấp cho bạn chiều cao của cửa sổ, không phải innerHeight.


9
Khi cửa sổ có thanh cuộn (do trình duyệt thêm vào), giá trị window.innerWidthtrả về chiều rộng của khung nhìn + chiều rộng của thanh cuộn. tôi có thể làm gì trong tình huống này?
Victor

8

Sự miêu tả

Phần sau sẽ cung cấp cho bạn kích thước của khung nhìn trình duyệt.

Mẫu vật

$(window).height();   // returns height of browser viewport
$(window).width();   // returns width of browser viewport

Thêm thông tin


5

Như Kyle đã đề xuất, bạn có thể đo kích thước cửa sổ xem của trình duyệt khách hàng mà không cần tính đến kích thước của các thanh cuộn theo cách này.

Mẫu (Kích thước khung nhìn KHÔNG CÓ thanh cuộn)

// First you forcibly request the scroll bars to hidden regardless if they will be needed or not.
$('body').css('overflow', 'hidden');

// Take your measures.
// (These measures WILL NOT take into account scroll bars dimensions)
var heightNoScrollBars = $(window).height();
var widthNoScrollBars = $(window).width();

// Set the overflow css property back to it's original value (default is auto)
$('body').css('overflow', 'auto');

Ngoài ra, nếu bạn muốn tìm kích thước của khung nhìn khách hàng trong khi tính đến kích thước của thanh cuộn, thì mẫu dưới đây phù hợp nhất với bạn.

Đầu tiên, đừng quên đặt thẻ body của bạn là 100% chiều rộng và chiều cao chỉ để đảm bảo số đo là chính xác.

body { 
width: 100%; // if you wish to measure the width and take into account the horizontal scroll bar.
height: 100%; // if you wish to measure the height while taking into account the vertical scroll bar.
}

Mẫu (Kích thước khung nhìn CÓ thanh cuộn)

// First you forcibly request the scroll bars to be shown regardless if they will be needed or not.
$('body').css('overflow', 'scroll');

// Take your measures.
// (These measures WILL take into account scroll bars dimensions)
var heightWithScrollBars = $(window).height();
var widthWithScrollBars = $(window).width();

// Set the overflow css property back to it's original value (default is auto)
$('body').css('overflow', 'auto');

4

Kịch bản $(window).height() hoạt động tốt (hiển thị chiều cao của khung nhìn chứ không hiển thị tài liệu có chiều cao cuộn), NHƯNG nó cần bạn đặt đúng thẻ loại tài liệu trong tài liệu của mình, ví dụ như các loại tài liệu sau:

Đối với html5: <!doctype html>

cho html4 chuyển tiếp: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

Có thể loại tài liệu mặc định được một số trình duyệt giả định là như vậy, $(window).height()lấy chiều cao của tài liệu chứ không phải chiều cao của trình duyệt. Với thông số kỹ thuật loại tài liệu, nó được giải quyết một cách thỏa đáng và tôi khá chắc chắn rằng bạn sẽ tránh được lỗi "thay đổi cuộn tràn thành ẩn rồi quay lại", tôi xin lỗi, một thủ thuật hơi bẩn, đặc biệt nếu bạn không t ghi lại nó trên mã để lập trình viên sử dụng trong tương lai.

Hơn nữa, nếu bạn đang thực hiện một tập lệnh, bạn có thể phát minh ra các bài kiểm tra để giúp các lập trình viên trong thư viện của bạn, hãy để tôi phát minh ra một vài:

$(document).ready(function() {
    if(typeof $=='undefined') {
        alert("Error, you haven't called JQuery library");
    }
    if(document.doctype==null || screen.height < parseInt($(window).height()) ) {
        alert("ERROR, check your doctype, the calculated heights are not what you might expect");
    } 
});

3
$(document).ready(function() {

  //calculate the window height & add css properties for height 100%

  wh = $( window ).height();

  ww = $( window ).width();

  $(".targeted-div").css({"height": wh, "width": ww});

});

0

Sử dụng jQuery ...

$ (document) .height () & $ (window) .height () sẽ trả về các giá trị giống nhau ... điều quan trọng là đặt lại phần đệm và lề của phần thân để bạn không bị cuộn.

<!--

body {
    padding: 0px;
    margin: 0px;
    position: relative;
}

-->

Hi vọng điêu nay co ich.


0

Tôi muốn trang web của mình có giao diện khác cho màn hình rộng và màn hình nhỏ. Tôi đã tạo 2 tệp CSS. Trong Java, tôi chọn tệp CSS nào trong số 2 tệp CSS được sử dụng tùy thuộc vào chiều rộng màn hình. Tôi sử dụng hàm PHP echovới trongecho một số javascript trong hàm.

mã của tôi trong <header>phần của tệp PHP của tôi:

<?php
echo "
<script>
    if ( window.innerWidth > 400)
            { document.write('<link href=\"kekemba_resort_stylesheetblog-jun2018.css\" rel=\"stylesheet\" type=\"text/css\">'); }
    else
            { document.write('<link href=\"kekemba_resort_stylesheetblog-jun2018small.css\" rel=\"stylesheet\" type=\"text/css\">'); }
</script>
"; 
?>
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.