2011-11-17 25 views
13

Có cách nào đáng tin cậy để cho biết chiều rộng khung nhìn của trình duyệt bao gồm thanh cuộn không, nhưng không phải phần còn lại của cửa sổ trình duyệt)?Cách nhận được độ rộng màn hình một cách đáng tin cậy Với thanh cuộn

Không ai trong số các thuộc tính được liệt kê here cho tôi biết chiều rộng của màn hình BAO GỒM scrollbar (nếu có)

+0

Tại sao bạn cần chiều rộng bằng thanh cuộn đi kèm? Chưa kể, một số trình duyệt có đường viền 1-4 pixel ở phía bên trái và bên phải của chế độ xem. Tôi thậm chí không hiểu tại sao mọi người sẽ cần 'outerWidth' và' outerHeight' ... – animuson

+0

@animuson: Tôi đặt chiều rộng của một số thành phần động và tùy thuộc vào cách trình duyệt sẽ hiển thị bố cục (phiên bản, kích thước màn hình, v.v.), đôi khi có một thanh cuộn mà sau đó biến mất để lại cho tôi với một "bóng scrollbar" trên trang. Nó sẽ đơn giản hơn nhiều nếu tôi biết chiều rộng KHÔNG CÓ thanh cuộn trước thời hạn. – Goro

+0

Xem thêm http://stackoverflow.com/q/8339377/1136253 –

Trả lời

5

Miễn là cơ thể 100%, document.body.scrollWidth sẽ hoạt động.

Demo: http://jsfiddle.net/ThinkingStiff/5j3bY/

HTML:

<div id="widths"></div> 

CSS:

body, html 
{ 
margin: 0; 
padding: 0; 
width: 100%; 
} 

div 
{ 
height: 1500px; 
} 

Script:

var widths = 'viewport width (body.scrollWidth): ' 
    + document.body.scrollWidth + '<br />' 
    + 'window.innerWidth: ' + window.innerWidth + '<br />'; 

document.getElementById('widths').innerHTML = widths; 

tôi đặt một div cao trong bản demo để buộc một cuộn quán ba.

+0

Điều này dường như không nhất quán. JSFiddle cho tôi body.scrollWidth: 580, window.innerWidth: 588. Tôi sẽ thêm giải pháp của riêng mình vào chủ đề này. – YoYoYonnY

+0

@YoYoYonnY Tôi nghĩ rằng đây có thể là sự cố iFrame với JSFiddle. Hãy cho tôi biết những gì bạn tìm thấy. – ThinkingStiff

+0

probrem vẫn tồn tại với Ubuntu Chrome: 'document.body.scrollWidth: 1351, window.innerWidth: 1366' – YoYoYonnY

0

Với jQuery bạn có thể tính toán chiều rộng thanh cuộn của trình duyệt bằng cách nhận sự khác biệt chiều rộng khi overflow: hidden được thiết lập và overflow: scroll được thiết lập . Sự khác biệt về chiều rộng sẽ là kích thước của thanh cuộn.

Đây là simple example cho biết cách bạn có thể thực hiện việc này.

+0

Tôi đã nhìn thấy rất nhiều ví dụ về điều đó trên web, nhưng thận trọng vì nó có vẻ như nếu có xung đột với một số trang tính khác trong trang, nó có thể không cho kết quả chính xác. – Goro

+0

chắc chắn bạn phải thử nếu nó hoạt động đúng cho trang của bạn.và như ThinkingStiff đã đạt được điều quan trọng là thiết lập chiều rộng cơ thể là 100%. – Fabian

6

Tôi giả sử bạn muốn biết chiều rộng khung nhìn với thanh cuộn đi kèm, bởi vì màn hình tự nó không có thanh cuộn. Trong thực tế, chiều rộng màn hình và độ phân giải sẽ là độ phân giải màn hình máy tính, vì vậy tôi không chắc chắn ý bạn là gì với chiều rộng màn hình với thanh cuộn.

Tuy nhiên, chế độ xem, khu vực chỉ có trang (và thanh cuộn) được hiển thị cho người dùng, nghĩa là không có menu trình duyệt, không có dấu trang hoặc bất kỳ thứ gì, chỉ hiển thị trang.

Giả sử bạn muốn điều đó, bạn có thể đo kích thước khung nhìn của trình duyệt của khách hàng trong khi tính đến kích thước của các thanh cuộn theo cách này.

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

body { 
width: 100%; 
// if you wish to also measure the height don't forget to also set it to 100% just like this one. 
} 

Sau đó, bạn có thể đo chiều rộng theo ý muốn.

mẫu

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

// Viewport width with scroll bar. 
var widthWithScrollBars = $(window).width(); 

// Now if you wish to know how many pixels the scroll bar actually has 
// Set the overflow css property to forcibly hide the scroll bar. 
$('body').css('overflow', 'hidden'); 

// Viewport width without scroll bar. 
var widthNoScrollBars = $(window).width(); 

// Scroll bar size for this particular client browser 
var scrollbarWidth = widthWithScrollBars - widthNoScrollBars; 

// Set the overflow css property back to whatever value it had before running this code. (default is auto) 
$('body').css('overflow', 'auto'); 

Hy vọng nó giúp.

8

tôi đã tìm ra cách để có được chính xác khung nhìn rộng VỚI scrollbar sử dụng một số mã từ: http://andylangton.co.uk/blog/development/get-viewport-size-width-and-height-javascript

Đặt này bên trong của bạn $(document).ready(function()

$(document).ready(function(){ 
    $(window).on("resize", function(){ 
     function viewport() { 
      var e = window, a = 'inner'; 
      if (!('innerWidth' in window)) { 
       a = 'client'; 
       e = document.documentElement || document.body; 
      } 
      return { width : e[ a+'Width' ] , height : e[ a+'Height' ] }; 
     } 
    }); 
    // Get the correct window sizes with these declarations 
    windowHeight = viewport().height; 
    windowWidth = viewport().width; 
}); 

những gì nó làm:

Khi trang của bạn đã sẵn sàng hoặc được thay đổi kích thước, hàm này tính toán chiều cao và chiều rộng cửa sổ chính xác (bao gồm ing scrollbar).

0

Bạn có thể lấy chiều rộng cửa sổ với thanh cuộn, như vậy:

function scrollbar_width() { 
      if (jQuery('body').height() > jQuery(window).height()) { 

       /* Modified from: http://jdsharp.us/jQuery/minute/calculate-scrollbar-width.php */ 
       var calculation_content = jQuery('<div style="width:50px;height:50px;overflow:hidden;position:absolute;top:-200px;left:-200px;"><div style="height:100px;"></div>'); 
       jQuery('body').append(calculation_content); 
       var width_one = jQuery('div', calculation_content).innerWidth(); 
       calculation_content.css('overflow-y', 'scroll'); 
       var width_two = jQuery('div', calculation_content).innerWidth(); 
       jQuery(calculation_content).remove(); 
       return (width_one - width_two); 
      } 
      return 0; 
     } 
1

Hiện nay mới vwvh Thuộc tính css3 sẽ hiển thị kích thước đầy đủ bao gồm cả thanh cuộn.

body { width:100vw; height:100vh; }

Có một số thảo luận trực tuyến nếu đây là lỗi hay không.

1

không có gì sau khi thanh cuộn để "phần còn lại của cửa sổ" là gì?

Nhưng có một cách để làm điều đó là làm cho một div bao bọc khác trong cơ thể nơi mọi thứ đi và cơ thể có overflow:none; height:100%; width:100%; trên đó, bao bọc div cũng có chiều rộng và chiều cao 100%. và tràn để cuộn. SO VỚI DOANH NGHIỆP ... chiều rộng của wrapper sẽ là chiều rộng của khung nhìn

xem ví dụ: http://jsfiddle.net/techsin/8fvne9fz/

html,body { 
    height: 100%; 
    overflow: hidden; 
} 

.wrapper { 
    width: 100%; 
    height: 100%; 
    overflow: auto; 
} 
0

Đây là giải pháp của tôi để loại bỏ các 'cuộn bóng', bởi vì scrollWidth đã không làm việc cho tôi:

canvas.width = element.offsetWidth; 
canvas.height = element.offsetHeight; 
canvas.width = element.offsetWidth; 
canvas.height = element.offsetHeight; 

Thật dễ dàng, nhưng nó hoạt động. Đảm bảo thêm nhận xét giải thích lý do bạn chỉ định cùng một giá trị hai lần :)

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