รับขนาดของหน้าจอหน้าเว็บปัจจุบันและหน้าต่างเบราว์เซอร์


2017

ฉันจะได้รับwindowWidth, windowHeight, pageWidth, pageHeight, screenWidth, screenHeight, pageX, pageY, screenX, screenYซึ่งจะทำงานในเบราว์เซอร์ที่สำคัญทั้งหมด?

สกรีนช็อตอธิบายค่าที่ต้องการ


9
pageHeight (ในรูป) คุณสามารถไปกับ: document.body.scrollHeight
befzz


สิ่งนี้อาจมีความเกี่ยวข้องเช่นกัน? developer.mozilla.org/en-US/docs/Web/API/Window.matchMedia
MEM

3
สิ่งที่น่าสนใจ: ryanve.com/lab/dimensions
e2-e4

1
บทช่วยสอนที่มีประโยชน์ - w3schools.com/jsref/prop_win_innerheight.asp
ลุง Iroh

คำตอบ:


1387

คุณสามารถรับขนาดของหน้าต่างหรือเอกสารด้วย jQuery:

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

// Size of HTML document (same as pageHeight/pageWidth in screenshot).
$(document).height();
$(document).width();

สำหรับขนาดหน้าจอคุณสามารถใช้screenวัตถุ:

window.screen.height;
window.screen.width;

2
ความสูงของเมธอด jQuery () ดูเหมือนจะใช้ได้กับทุกอิลิเมนต์และส่งกลับตัวเลข ( 46) แทนที่จะเป็นสตริงเช่น css ('height') ( "46px")
คริส

6
เมื่อจัดการกับ Safari บนมือถือ jQuery ที่น่าเศร้าไม่ใช่วิธีแก้ปัญหาที่สมบูรณ์แบบสำหรับคำถามนี้ ดูหมายเหตุในบรรทัด # 13 ที่github.com/jquery/jquery/blob/master/src/dimensions.js
Joshua

8
@ 웃웃웃웃웃คุณแก้ไขอะไรในคำตอบ? ตามการแก้ไขคุณไม่ได้แก้ไขอะไรเลย
Daniel W.

14
@Marco Kerwitz สิ่งที่แย่ที่สุดคือฉันพิมพ์ "javascript รับความกว้างของหน้าต่าง" และเนื้อหาของคำตอบนี้อยู่บน Google ใหญ่ลบหนึ่งจากฉัน
Maciej Krawczyk

2
OP DID ASKที่ jQuery เป็นตัวเลือก ใครก็ตามที่นินจาแก้ไขคำถามเดิมเพื่อแยกออกเป็นความผิดที่นี่ไม่ใช่คนที่ให้คำตอบที่ถูกต้องโดยใช้ห้องสมุดจาวาสคริปต์ที่ได้รับการยอมรับจากทั่วโลก
IncredibleHat

962

สิ่งนี้มีทุกสิ่งที่คุณจำเป็นต้องรู้: รับวิวพอร์ต / ขนาดหน้าต่าง

แต่ในระยะสั้น:

var win = window,
    doc = document,
    docElem = doc.documentElement,
    body = doc.getElementsByTagName('body')[0],
    x = win.innerWidth || docElem.clientWidth || body.clientWidth,
    y = win.innerHeight|| docElem.clientHeight|| body.clientHeight;
alert(x + ' × ' + y);

ซอ

โปรดหยุดแก้ไขคำตอบนี้ ขณะนี้มีการแก้ไข 22 ครั้งโดยบุคคลอื่นเพื่อให้ตรงกับการตั้งค่ารูปแบบรหัสของพวกเขา มีการชี้ให้เห็นว่าสิ่งนี้ไม่จำเป็นหากคุณต้องการกำหนดเป้าหมายเบราว์เซอร์ที่ทันสมัย ​​- หากเป็นเช่นนั้นคุณจำเป็นต้องใช้สิ่งต่อไปนี้เท่านั้น:

const width  = window.innerWidth || document.documentElement.clientWidth || 
document.body.clientWidth;
const height = window.innerHeight|| document.documentElement.clientHeight|| 
document.body.clientHeight;

console.log(width, height);

58
ทำไมg = document.bodyล่ะ
เงินที่จ่าย

51
@apaidnerd: มาตรฐานที่ท้าทายเบราว์เซอร์เช่น IE8 ไม่รองรับ document.body อย่างไรก็ตาม IE9 ทำเช่นนั้น
Michael Mikowski

46
@MichaelMikowski นั่นไม่เป็นความจริง! แม้ IE5 document.bodyสนับสนุน
Nux

32
@nux ฉันได้รับการแก้ไขแล้วและฉันยืนยันการสนับสนุนใน IE8 แล้ว ฉันรู้ว่าเบราว์เซอร์อย่างน้อยหนึ่งตัวที่เรากำหนดเป้าหมายเมื่อเร็ว ๆ นี้ไม่สนับสนุน document.body และเราต้องเปลี่ยนเพื่อใช้วิธี getElementsByTagName แต่ฉันเดาว่าฉันจำเบราว์เซอร์ผิด ขออภัย!
Michael Mikowski

32
ฉันแค่อยากจะกล่าวอย่างเงียบ ๆ ว่าชื่อตัวแปรตัวอักษรหนึ่งตัวไม่มีประโยชน์
wybe

480

นี่คือโซลูชันข้ามเบราว์เซอร์ที่มีJavaScriptบริสุทธิ์( ที่มา ):

var width = window.innerWidth
|| document.documentElement.clientWidth
|| document.body.clientWidth;

var height = window.innerHeight
|| document.documentElement.clientHeight
|| document.body.clientHeight;

9
สิ่งนี้จะดีกว่าเพราะถ้าคุณสามารถเรียกสคริปต์ได้เร็วพอในกระบวนการโหลด (มักเป็นความคิด) ดังนั้นค่าbody elementจะส่งคืนค่าundefinedเนื่องจาก dom ยังไม่ถูกโหลด
DGO

16
ฮา! ด้ายเก่า แต่ขอบคุณสำหรับสิ่งนั้น! ฉันเดาว่าฉันเป็นหนึ่งใน "คนโง่" ที่พยายามให้การสนับสนุนอย่างน้อยกลับไปที่ IE8 เมื่อเป็นไปได้เพื่อประโยชน์ของผู้ใช้ตามบ้านจำนวนมากที่ไม่เคยหยุดใช้ XP จนกว่าเครื่องของพวกเขาจะติดไฟ ฉันเบื่อที่จะถามคำถามและแทนที่จะตอบคำถามลงคะแนนด้วย "STOP SUPPORTING IE8 !!" เท่านั้น เป็นความคิดเห็น ขอบคุณอีกครั้ง! นี่เป็นการแก้ไขปัญหาสำหรับฉันด้วยการซูมภาพจาวาสคริปต์ที่ฉันได้ทำไปแล้ว มันช้าเล็กน้อยใน IE8 แต่ตอนนี้อย่างน้อยก็ใช้งานได้ !!! :-)
แรนดี้

1
ดีมากดีกว่าพัก
vayayak shahdeo

95

วิธีที่ไม่ใช่ jQuery ในการรับมิติหน้าจอที่มีอยู่ window.screen.width/heightได้รับการวาง แต่สำหรับการออกแบบเว็บตอบสนองและเห็นแก่สมบูรณ์ฉันคิดว่ามันคุ้มค่าที่จะพูดถึงคุณลักษณะเหล่านั้น:

alert(window.screen.availWidth);
alert(window.screen.availHeight);

http://www.quirksmode.org/dom/w3c_cssom.html#t10 :

availWidthและavailHeight - ความกว้างและความสูงที่มีอยู่บนหน้าจอ (ไม่รวมแถบงาน OS และอื่น ๆ )


เช่นเดียวกับความกว้างของหน้าจอความสูง - ในเบราว์เซอร์โครเมียม Android แสดงให้เห็นว่าอัตราส่วนพิกเซลแบ่งเป็นสัดส่วน :(
Darius.V

2
window.screen.availHeightดูเหมือนว่าจะใช้โหมดเต็มหน้าจอเพื่อให้โหมดหน้าจอปกติบังคับให้เลื่อน (ทดสอบใน Firefox และ Chrome)
Suzana

@Suzana_K แล้วใช้window.screen.heightแทน
vallentin

65

แต่เมื่อเราพูดถึงหน้าจอที่ตอบสนองได้และถ้าเราต้องการจัดการโดยใช้ jQuery ด้วยเหตุผลบางอย่าง

window.innerWidth, window.innerHeight

ให้การวัดที่ถูกต้อง แม้ว่ามันจะลบพื้นที่พิเศษของแถบเลื่อนและเราไม่จำเป็นต้องกังวลเกี่ยวกับการปรับพื้นที่นั้น :)


2
นี่ควรเป็นคำตอบที่ได้รับการยอมรับพร้อมกับจำนวน upvotes คำตอบที่มีประโยชน์มากกว่าคำตอบที่ยอมรับในปัจจุบันและไม่ได้ขึ้นอยู่กับ jQuery
developerbmw

5
น่าเสียดายwindow.innerWidthและwindow.innerHeightไม่สามารถพิจารณาขนาดของแถบเลื่อนได้ หากมีแถบเลื่อนวิธีการเหล่านี้จะส่งคืนผลลัพธ์ที่ผิดสำหรับขนาดหน้าต่างในเบราว์เซอร์เดสก์ท็อปเกือบทั้งหมด ดูstackoverflow.com/a/31655549/508355
hashchange

20

คุณยังสามารถรับความกว้างและความสูงของ WINDOW ได้โดยหลีกเลี่ยงแถบเครื่องมือของเบราว์เซอร์และสิ่งอื่น ๆ มันเป็นพื้นที่ใช้สอยจริงในหน้าต่างเบราว์เซอร์

หากต้องการทำสิ่งนี้ให้ใช้: window.innerWidth และ window.innerHeightคุณสมบัติ ( ดูเอกสารที่ w3schools )

ในกรณีส่วนใหญ่มันจะเป็นวิธีที่ดีที่สุดเช่นในการแสดงกล่องโต้ตอบลอยโมดัลกึ่งกลางอย่างสมบูรณ์ มันช่วยให้คุณสามารถคำนวณตำแหน่งบนหน้าต่างได้ไม่ว่าจะใช้การวางแนวความละเอียดหรือขนาดหน้าต่างใดก็ตาม


2
สิ่งนี้ไม่รองรับใน ie8 หรือ ie7 ตาม w3schools นอกจากนี้คุณต้องระวังเมื่อคุณเชื่อมโยงไปยัง w3schools ดูmeta.stackexchange.com/questions/87678/…
thecarpy

20
function wndsize(){
  var w = 0;var h = 0;
  //IE
  if(!window.innerWidth){
    if(!(document.documentElement.clientWidth == 0)){
      //strict mode
      w = document.documentElement.clientWidth;h = document.documentElement.clientHeight;
    } else{
      //quirks mode
      w = document.body.clientWidth;h = document.body.clientHeight;
    }
  } else {
    //w3c
    w = window.innerWidth;h = window.innerHeight;
  }
  return {width:w,height:h};
}
function wndcent(){
  var hWnd = (arguments[0] != null) ? arguments[0] : {width:0,height:0};
  var _x = 0;var _y = 0;var offsetX = 0;var offsetY = 0;
  //IE
  if(!window.pageYOffset){
    //strict mode
    if(!(document.documentElement.scrollTop == 0)){offsetY = document.documentElement.scrollTop;offsetX = document.documentElement.scrollLeft;}
    //quirks mode
    else{offsetY = document.body.scrollTop;offsetX = document.body.scrollLeft;}}
    //w3c
    else{offsetX = window.pageXOffset;offsetY = window.pageYOffset;}_x = ((wndsize().width-hWnd.width)/2)+offsetX;_y = ((wndsize().height-hWnd.height)/2)+offsetY;
    return{x:_x,y:_y};
}
var center = wndcent({width:350,height:350});
document.write(center.x+';<br>');
document.write(center.y+';<br>');
document.write('<DIV align="center" id="rich_ad" style="Z-INDEX: 10; left:'+center.x+'px;WIDTH: 350px; POSITION: absolute; TOP: '+center.y+'px; HEIGHT: 350px"><!--К сожалению, у Вас не установлен flash плеер.--></div>');

20

เพื่อตรวจสอบความสูงและความกว้างของหน้าโหลดของคุณในปัจจุบันของเว็บไซต์ใด ๆ โดยใช้"คอนโซล"หรือหลังจากคลิก"ตรวจสอบ"

ขั้นตอนที่ 1 : คลิกปุ่มขวาของเมาส์และคลิกที่ 'ตรวจสอบ' แล้วคลิก 'คอนโซล'

ขั้นตอนที่ 2 : ตรวจสอบให้แน่ใจว่าหน้าจอเบราว์เซอร์ของคุณไม่ควรอยู่ในโหมด 'ขยายใหญ่สุด' หากหน้าจอเบราว์เซอร์อยู่ในโหมด 'ขยายใหญ่สุด' คุณต้องคลิกปุ่มขยายใหญ่สุด (แสดงที่มุมขวาหรือซ้ายด้านบน) และยกเลิกการขยายใหญ่สุด

ขั้นตอนที่ 3 : ตอนนี้เขียนสิ่งต่อไปนี้หลังจากเครื่องหมายมากกว่า ('>') เช่น

       > window.innerWidth
            output : your present window width in px (say 749)

       > window.innerHeight
            output : your present window height in px (say 359)

1
ทำไมนี่ไม่ใช่คำตอบที่เลือก?
Iulian Onofrei

1
@IulianOnofrei เพราะมันไม่ได้ตอบคำถามชุดเดิมอย่างเต็มที่ เรื่องตลกมันเป็นคำตอบที่ถูกต้องสำหรับฉัน
ปล้น

innerWidth และ innerHeight นั้นถูกต้องก็ต่อเมื่อขนาดวิวพอร์ตคือ 1 นี่เป็นค่าเริ่มต้น แต่สามารถเปลี่ยนแปลงได้โดยไม่ตั้งใจโดยใช้การแปลง css
Victor Stoddard

"window.innerWidth" ตรงข้ามกับ "screen.width" ที่ทำงานให้ฉันเพื่อกำหนดขนาดของเบราว์เซอร์ของผู้ใช้ - ขอบคุณ!
Kevin Pajak

10

หากคุณต้องแก้ปัญหาอย่างแท้จริงกระสุนสำหรับความกว้างและความสูงของเอกสาร (คนpageWidthและpageHeightในภาพ) คุณอาจต้องการพิจารณาใช้ปลั๊กอินของฉันjQuery.documentSize

แต่ก็มีเพียงหนึ่งวัตถุประสงค์: เสมอกลับขนาดของเอกสารที่ถูกต้องแม้จะอยู่ในสถานการณ์เมื่อ jQuery และวิธีการอื่น ๆล้มเหลว อย่างไรก็ตามชื่อของมันที่คุณไม่จำเป็นต้องใช้ jQuery - มันถูกเขียนในวานิลลา Javascript และผลงานโดยไม่ต้อง jQueryเกินไป

การใช้งาน:

var w = $.documentWidth(),
    h = $.documentHeight();

documentสำหรับทั่วโลก สำหรับเอกสารอื่น ๆ เช่นใน iframe แบบฝังที่คุณสามารถเข้าถึงได้ให้ส่งเอกสารเป็นพารามิเตอร์:

var w = $.documentWidth( myIframe.contentDocument ),
    h = $.documentHeight( myIframe.contentDocument );

อัปเดต: ตอนนี้สำหรับขนาดหน้าต่างด้วย

นับตั้งแต่รุ่น 1.1.0 jQuery.documentSize ยังจัดการขนาดหน้าต่าง

นั่นเป็นสิ่งจำเป็นเพราะ

  • $( window ).height()เป็นรถใน iOSไปยังจุดของความไร้ประโยชน์
  • $( window ).width()และ$( window ).height()มีความน่าเชื่อถือบนมือถือเพราะพวกเขาไม่ได้จัดการกับผลกระทบของการซูมมือถือ

jQuery.documentSize ให้$.windowWidth()และ$.windowHeight()ซึ่งแก้ปัญหาเหล่านี้ สำหรับข้อมูลเพิ่มเติมโปรดตรวจสอบเอกสาร


VM2859: 1 Uncaught DOMException: ปิดกั้นเฟรมที่มีจุดเริ่มต้น " localhost: 12999 " ไม่ให้เข้าถึงเฟรมข้ามจุดเริ่มต้น (…) มีวิธีใดบ้างที่จะแก้ปัญหานี้ ???
fizmhd

1
คุณไม่สามารถเข้าถึง iframes จากโดเมนที่แตกต่างกันมีการละเมิดนโยบายเดียวกันแหล่งกำเนิด ลองดูคำตอบนี้
แฮชเชน

สิ่งนี้ไม่ทำงานหากคุณฝัง iframe และพยายามรับความสูงของพอร์ตดู window.innerHeight เท่ากับความสูงของเอกสารซึ่งเป็นค่าบั๊ก คุณไม่สามารถเข้าถึงเฟรม จากโดเมนอื่นไม่ใช่โซลูชันที่เป็นไปได้
M.Abulsoud

@ M.Abulsoud หากคุณมีสิทธิ์เข้าถึง iframe (ไม่มีการละเมิด CORS) จะสามารถใช้งานได้และครอบคลุมโดยชุดทดสอบ ใช้ไวยากรณ์นี้ มันยังทำงานร่วมกับ iframe หลายซ้อนอยู่ภายในแต่ละอื่น ๆ - ดูตัวอย่างนี้ Codepen หากการตั้งค่าของคุณใช้งานได้ตามปกติ แต่ล้มเหลวในเบราว์เซอร์หนึ่ง ๆ อาจเป็นข้อผิดพลาดที่ฉันไม่ทราบ บางทีคุณสามารถเปิดปัญหาในกรณีที่? ขอบคุณ
hashchange

8

ฉันเขียน javascript bookmarklet ขนาดเล็กที่คุณสามารถใช้เพื่อแสดงขนาด คุณสามารถเพิ่มลงในเบราว์เซอร์ของคุณได้อย่างง่ายดายและเมื่อใดก็ตามที่คุณคลิกคุณจะเห็นขนาดที่มุมด้านขวาของหน้าต่างเบราว์เซอร์ของคุณ

ที่นี่คุณจะพบข้อมูลวิธีใช้ bookmarklet https://en.wikipedia.org/wiki/Bookmarklet

bookmarklet

javascript:(function(){!function(){var i,n,e;return n=function(){var n,e,t;return t="background-color:azure; padding:1rem; position:fixed; right: 0; z-index:9999; font-size: 1.2rem;",n=i('<div style="'+t+'"></div>'),e=function(){return'<p style="margin:0;">width: '+i(window).width()+" height: "+i(window).height()+"</p>"},n.html(e()),i("body").prepend(n),i(window).resize(function(){n.html(e())})},(i=window.jQuery)?(i=window.jQuery,n()):(e=document.createElement("script"),e.src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js",e.onload=n,document.body.appendChild(e))}()}).call(this);

รหัสต้นฉบับ

รหัสเดิมอยู่ในกาแฟ:

(->
  addWindowSize = ()->
    style = 'background-color:azure; padding:1rem; position:fixed; right: 0; z-index:9999; font-size: 1.2rem;'
    $windowSize = $('<div style="' + style + '"></div>')

    getWindowSize = ->
      '<p style="margin:0;">width: ' + $(window).width() + ' height: ' + $(window).height() + '</p>'

    $windowSize.html getWindowSize()
    $('body').prepend $windowSize
    $(window).resize ->
      $windowSize.html getWindowSize()
      return

  if !($ = window.jQuery)
    # typeof jQuery=='undefined' works too
    script = document.createElement('script')
    script.src = 'http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js'
    script.onload = addWindowSize
    document.body.appendChild script
  else
    $ = window.jQuery
    addWindowSize()
)()

โดยทั่วไปรหัสจะมีการเตรียม div ขนาดเล็กซึ่งจะอัปเดตเมื่อคุณปรับขนาดหน้าต่าง


5

ในบางกรณีที่เกี่ยวข้องกับเค้าโครงตอบสนอง$(document).height()สามารถส่งคืนข้อมูลที่ไม่ถูกต้องซึ่งแสดงความสูงของพอร์ตการดูเท่านั้น ตัวอย่างเช่นเมื่อ div # wrapper บางส่วนมีความสูง: 100% #wrapper นั้นสามารถยืดได้โดยบล็อกบางส่วนที่อยู่ภายใน แต่ความสูงของมันจะยังคงเหมือนความสูงของวิวพอร์ต ในสถานการณ์เช่นนี้คุณอาจใช้

$('#wrapper').get(0).scrollHeight

นั่นหมายถึงขนาดของเสื้อคลุมที่แท้จริง


คำตอบมากมายที่มี upvotes หลายร้อย แต่มีคำตอบเดียวที่มีประโยชน์
Nakilon

5

คู่มือฉบับสมบูรณ์ที่เกี่ยวข้องกับขนาดหน้าจอ

JavaScript

สำหรับความสูง:

document.body.clientHeight  // Inner height of the HTML document body, including padding 
                            // but not the horizontal scrollbar height, border, or margin

screen.height               // Device screen height (i.e. all physically visible stuff)
screen.availHeight          // Device screen height minus the operating system taskbar (if present)
window.innerHeight          // The current document's viewport height, minus taskbars, etc.
window.outerHeight          // Height the current window visibly takes up on screen 
                            // (including taskbars, menus, etc.)

หมายเหตุ: เมื่อหน้าต่างขยายใหญ่สุดนี่จะเท่ากับหน้าจอavailHeight

สำหรับความกว้าง:

document.body.clientWidth   // Full width of the HTML page as coded, minus the vertical scroll bar
screen.width                // Device screen width (i.e. all physically visible stuff)
screen.availWidth           // Device screen width, minus the operating system taskbar (if present)
window.innerWidth           // The browser viewport width (including vertical scroll bar, includes padding but not border or margin)
window.outerWidth           // The outer window width (including vertical scroll bar,
                            // toolbars, etc., includes padding and border but not margin)

jquery

สำหรับความสูง:

$(document).height()    // Full height of the HTML page, including content you have to 
                        // scroll to see

$(window).height()      // The current document's viewport height, minus taskbars, etc.
$(window).innerHeight() // The current document's viewport height, minus taskbars, etc.
$(window).outerHeight() // The current document's viewport height, minus taskbars, etc.                         

สำหรับความกว้าง:

$(document).width()     // The browser viewport width, minus the vertical scroll bar
$(window).width()       // The browser viewport width (minus the vertical scroll bar)
$(window).innerWidth()  // The browser viewport width (minus the vertical scroll bar)
$(window).outerWidth()  // The browser viewport width (minus the vertical scroll bar)

การอ้างอิง: https://help.optimizely.com/Build_Campaigns_and_Experiments/Use_screen_measurements_to_design_for_responsive_breakpoints


4

ฉันพัฒนาห้องสมุดสำหรับการรู้ขนาดวิวพอร์ตที่แท้จริงสำหรับเดสก์ท็อปและเบราว์เซอร์มือถือเนื่องจากขนาดวิวพอร์ตนั้นไม่สอดคล้องกันในอุปกรณ์และไม่สามารถพึ่งพาคำตอบทั้งหมดของโพสต์นั้น (ตามการวิจัยทั้งหมดที่ฉันทำ): https: // github .com / pyrsmk / W


3

บางครั้งคุณต้องเห็นการเปลี่ยนแปลงความกว้าง / ความสูงในขณะที่ปรับขนาดหน้าต่างและเนื้อหาภายใน

เพื่อที่ฉันได้เขียนสคริปต์เล็กน้อยที่เพิ่มกล่องบันทึกที่ตรวจสอบการปรับขนาดและการปรับปรุงเกือบทั้งหมดแบบไดนามิก

เพิ่ม HTML ที่ถูกต้องพร้อมตำแหน่งคงที่และดัชนี z สูง แต่เล็กพอคุณจึงสามารถ :

  • ใช้บนเว็บไซต์จริง
  • ใช้สำหรับทดสอบ มุมมองอุปกรณ์เคลื่อนที่ / ตอบสนอง


ทดสอบแล้ว: Chrome 40, IE11 แต่มันเป็นไปได้สูงที่จะทำงานบนเบราว์เซอร์อื่น / เก่าเกินไป ... :)

  function gebID(id){ return document.getElementById(id); }
  function gebTN(tagName, parentEl){ 
     if( typeof parentEl == "undefined" ) var parentEl = document;
     return parentEl.getElementsByTagName(tagName);
  }
  function setStyleToTags(parentEl, tagName, styleString){
    var tags = gebTN(tagName, parentEl);
    for( var i = 0; i<tags.length; i++ ) tags[i].setAttribute('style', styleString);
  }
  function testSizes(){
    gebID( 'screen.Width' ).innerHTML = screen.width;
    gebID( 'screen.Height' ).innerHTML = screen.height;

    gebID( 'window.Width' ).innerHTML = window.innerWidth;
    gebID( 'window.Height' ).innerHTML = window.innerHeight;

    gebID( 'documentElement.Width' ).innerHTML = document.documentElement.clientWidth;
    gebID( 'documentElement.Height' ).innerHTML = document.documentElement.clientHeight;

    gebID( 'body.Width' ).innerHTML = gebTN("body")[0].clientWidth;
    gebID( 'body.Height' ).innerHTML = gebTN("body")[0].clientHeight;  
  }

  var table = document.createElement('table');
  table.innerHTML = 
       "<tr><th>SOURCE</th><th>WIDTH</th><th>x</th><th>HEIGHT</th></tr>"
      +"<tr><td>screen</td><td id='screen.Width' /><td>x</td><td id='screen.Height' /></tr>"
      +"<tr><td>window</td><td id='window.Width' /><td>x</td><td id='window.Height' /></tr>"
      +"<tr><td>document<br>.documentElement</td><td id='documentElement.Width' /><td>x</td><td id='documentElement.Height' /></tr>"
      +"<tr><td>document.body</td><td id='body.Width' /><td>x</td><td id='body.Height' /></tr>"
  ;

  gebTN("body")[0].appendChild( table );

  table.setAttribute(
     'style',
     "border: 2px solid black !important; position: fixed !important;"
     +"left: 50% !important; top: 0px !important; padding:10px !important;"
     +"width: 150px !important; font-size:18px; !important"
     +"white-space: pre !important; font-family: monospace !important;"
     +"z-index: 9999 !important;background: white !important;"
  );
  setStyleToTags(table, "td", "color: black !important; border: none !important; padding: 5px !important; text-align:center !important;");
  setStyleToTags(table, "th", "color: black !important; border: none !important; padding: 5px !important; text-align:center !important;");

  table.style.setProperty( 'margin-left', '-'+( table.clientWidth / 2 )+'px' );

  setInterval( testSizes, 200 );

แก้ไข:ตอนนี้รูปแบบจะใช้เฉพาะกับองค์ประกอบตารางคนตัดไม้ - ไม่ทุกตาราง - ยังเป็นวิธีการแก้ปัญหาjQuery ฟรี :)


3

ด้วยการแนะนำglobalThisในES2020คุณสามารถใช้คุณสมบัติเช่น

สำหรับขนาดหน้าจอ:

globalThis.screen.availWidth 
globalThis.screen.availHeight

สำหรับขนาดหน้าต่าง

globalThis.outerWidth
globalThis.outerHeight

สำหรับการชดเชย:

globalThis.pageXOffset
globalThis.pageYOffset

... และต่อไป

alert("Screen Width: "+ globalThis.screen.availWidth +"\nScreen Height: "+ globalThis.screen.availHeight)


2

คุณสามารถใช้วัตถุหน้าจอเพื่อรับสิ่งนี้

ต่อไปนี้เป็นตัวอย่างของสิ่งที่จะส่งคืน:

Screen {
    availWidth: 1920,
    availHeight: 1040,
    width: 1920,
    height: 1080,
    colorDepth: 24,
    pixelDepth: 24,
    top: 414,
    left: 1920,
    availTop: 414,
    availLeft: 1920
}

ที่จะได้รับของscreenWidthตัวแปรเพียงแค่การใช้งานscreen.widthเช่นเดียวกับคุณจะเป็นเพียงแค่การใช้งานscreenHeightscreen.height

เพื่อให้ได้ความกว้างและความสูงของหน้าต่างมันจะเป็นscreen.availWidthหรือscreen.availHeightตามลำดับ

สำหรับpageXและตัวแปรการใช้งานpageY window.screenX or Yโปรดทราบว่านี่คือจากซ้าย / บนสุดของหน้าจอซ้าย /บนสุดของคุณ ดังนั้นหากคุณมีความกว้างสองหน้าจอ1920หน้าต่าง 500px จากด้านซ้ายของหน้าจอด้านขวาจะมีค่า X เท่ากับ2420(1920 + 500) screen.width/heightอย่างไรก็ตามแสดงความกว้างหรือความสูงของหน้าจอปัจจุบัน

เพื่อให้ได้ความกว้างและความสูงของหน้าของคุณให้ใช้ของ jQuery หรือ$(window).height()$(window).width()

ใช้ jQuery อีกครั้งใช้$("html").offset().topและ$("html").offset().leftสำหรับpageXและpageYค่าของคุณ


0

นี่คือทางออกของฉัน!

// innerWidth
const screen_viewport_inner = () => {
    let w = window,
        i = `inner`;
    if (!(`innerWidth` in window)) {
        i = `client`;
        w = document.documentElement || document.body;
    }
    return {
        width: w[`${i}Width`],
        height: w[`${i}Height`]
    }
};


// outerWidth
const screen_viewport_outer = () => {
    let w = window,
        o = `outer`;
    if (!(`outerWidth` in window)) {
        o = `client`;
        w = document.documentElement || document.body;
    }
    return {
        width: w[`${o}Width`],
        height: w[`${o}Height`]
    }
};

// style
const console_color = `
    color: rgba(0,255,0,0.7);
    font-size: 1.5rem;
    border: 1px solid red;
`;



// testing
const test = () => {
    let i_obj = screen_viewport_inner();
    console.log(`%c screen_viewport_inner = \n`, console_color, JSON.stringify(i_obj, null, 4));
    let o_obj = screen_viewport_outer();
    console.log(`%c screen_viewport_outer = \n`, console_color, JSON.stringify(o_obj, null, 4));
};

// IIFE
(() => {
    test();
})();



0

นี่เป็นวิธีที่ฉันจัดการเพื่อให้ได้ความกว้างของหน้าจอใน React JS Project:

หากความกว้างเท่ากับ 1680 ให้ส่งคืน 570 และส่งคืนค่า 200

var screenWidth = window.screen.availWidth;

<Label style={{ width: screenWidth == "1680" ? 570 : 200, color: "transparent" }}>a  </Label>

Screen.availWidth

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.