ฉันพยายามเขียนฟังก์ชัน JavaScript เพื่อรับความกว้างของเบราว์เซอร์ปัจจุบัน
ฉันพบสิ่งนี้:
javascript:alert(document.body.offsetWidth);
แต่ปัญหามันล้มเหลวถ้าร่างกายมีความกว้าง 100%
มีฟังก์ชั่นอื่น ๆ ที่ดีกว่าหรือวิธีแก้ปัญหา?
ฉันพยายามเขียนฟังก์ชัน JavaScript เพื่อรับความกว้างของเบราว์เซอร์ปัจจุบัน
ฉันพบสิ่งนี้:
javascript:alert(document.body.offsetWidth);
แต่ปัญหามันล้มเหลวถ้าร่างกายมีความกว้าง 100%
มีฟังก์ชั่นอื่น ๆ ที่ดีกว่าหรือวิธีแก้ปัญหา?
คำตอบ:
คำตอบเดิมของฉันถูกเขียนในปี 2009 ในขณะที่ยังใช้งานได้ฉันต้องการอัปเดตในปี 2560 เบราว์เซอร์ยังคงทำงานได้แตกต่างกัน ฉันเชื่อถือทีม jQuery เพื่อทำงานที่ยอดเยี่ยมในการรักษาความมั่นคงของเบราว์เซอร์ อย่างไรก็ตามไม่จำเป็นต้องรวมไลบรารีทั้งหมด ในแหล่ง jQuery ที่ส่วนที่เกี่ยวข้องจะพบได้บนเส้น 37 dimensions.js ที่นี่มีการแยกและแก้ไขเพื่อใช้งานแบบสแตนด์อโลน:
function getWidth() {
return Math.max(
document.body.scrollWidth,
document.documentElement.scrollWidth,
document.body.offsetWidth,
document.documentElement.offsetWidth,
document.documentElement.clientWidth
);
}
function getHeight() {
return Math.max(
document.body.scrollHeight,
document.documentElement.scrollHeight,
document.body.offsetHeight,
document.documentElement.offsetHeight,
document.documentElement.clientHeight
);
}
console.log('Width: ' + getWidth() );
console.log('Height: ' + getHeight() );
เนื่องจากเบราว์เซอร์ทั้งหมดทำงานแตกต่างกันคุณจะต้องทดสอบค่าก่อนจากนั้นจึงใช้ค่าที่ถูกต้อง นี่คือฟังก์ชั่นที่ทำเพื่อคุณ:
function getWidth() {
if (self.innerWidth) {
return self.innerWidth;
}
if (document.documentElement && document.documentElement.clientWidth) {
return document.documentElement.clientWidth;
}
if (document.body) {
return document.body.clientWidth;
}
}
และในทำนองเดียวกันสำหรับความสูง:
function getHeight() {
if (self.innerHeight) {
return self.innerHeight;
}
if (document.documentElement && document.documentElement.clientHeight) {
return document.documentElement.clientHeight;
}
if (document.body) {
return document.body.clientHeight;
}
}
สอบถามทั้งสองคนนี้ในสคริปต์ของคุณโดยใช้หรือgetWidth()
ถ้าไม่มีคุณสมบัติพื้นเมืองของเบราว์เซอร์ที่กำหนดไว้ก็จะกลับgetHeight()
undefined
self.innerWidth 423
, และdocument.documentElement.clientWidth 326
document.body.clientWidth 406
ในกรณีคำถามดังกล่าว: ซึ่งถูกต้องและที่จะใช้? ตัวอย่างเช่นฉันต้องการปรับขนาดแผนที่ google 326 หรือ 423 ต่างกันมาก หากความกว้าง ~ 700 ให้ดูที่ 759, 735, 742 (ไม่ต่างกันมากนัก)
var pageWidth = Math.max(self.innerWidth || 0, document.documentElement.clientWidth || 0, document.body.clientWidth || 0);
และvar windowWidth = self.innerWidth || -1;
// เนื่องจาก "เนื้อหา" หรือ "หน้าจอ" หรือ "เอกสาร" ไม่ใช่ "หน้าต่าง" หากคุณตรวจสอบเนื้อหาที่ล้นของ html คุณสามารถเข้าใจได้ # i.stack.imgur.com/6xPdH.png
getWidth()
อ้างอิงฟังก์ชันself.innerHeight
มันเป็นความเจ็บปวดในตูด ผมขอแนะนำให้ข้ามเรื่องไร้สาระและการใช้jQuery$(window).width()
ซึ่งช่วยให้คุณทำ
var w = window.innerWidth;
var h = window.innerHeight;
var ow = window.outerWidth; //including toolbars and status bar etc.
var oh = window.outerHeight;
ทั้งคืนค่าจำนวนเต็มและไม่ต้องการ jQuery เข้ากันได้ข้ามเบราว์เซอร์
ฉันมักจะพบว่า jQuery ส่งคืนค่าที่ไม่ถูกต้องสำหรับ width () และ height ()
ทำไมไม่มีใครพูดถึงสื่อ?
if (window.matchMedia("(min-width: 400px)").matches) {
/* the viewport is at least 400 pixels wide */
} else {
/* the viewport is less than 400 pixels wide */
}
ไม่ได้ทดสอบมากนัก แต่ทดสอบด้วยค่าเริ่มต้นของ Android และเบราว์เซอร์ Chrome android, chrome desktop จนถึงตอนนี้ดูเหมือนว่ามันจะทำงานได้ดี
แน่นอนว่ามันไม่ส่งคืนค่าตัวเลข แต่คืนค่าบูลีน - ถ้าจับคู่หรือไม่ดังนั้นอาจไม่ตรงกับคำถาม แต่นั่นคือสิ่งที่เราต้องการต่อไปและอาจเป็นผู้เขียนคำถามที่ต้องการ
จาก W3schools และเบราว์เซอร์ข้ามไปสู่ยุคมืดของ IE!
<!DOCTYPE html>
<html>
<body>
<p id="demo"></p>
<script>
var w = window.innerWidth
|| document.documentElement.clientWidth
|| document.body.clientWidth;
var h = window.innerHeight
|| document.documentElement.clientHeight
|| document.body.clientHeight;
var x = document.getElementById("demo");
x.innerHTML = "Browser inner window width: " + w + ", height: " + h + ".";
alert("Browser inner window width: " + w + ", height: " + h + ".");
</script>
</body>
</html>
นี่คือฟังก์ชั่นเวอร์ชั่นที่สั้นกว่าที่แสดงด้านบน:
function getWidth() {
if (self.innerWidth) {
return self.innerWidth;
}
else if (document.documentElement && document.documentElement.clientHeight){
return document.documentElement.clientWidth;
}
else if (document.body) {
return document.body.clientWidth;
}
return 0;
}
โซลูชันที่ปรับให้เข้ากับคำตอบของเทรวิส JS ที่ทันสมัย:
const getPageWidth = () => {
const bodyMax = document.body
? Math.max(document.body.scrollWidth, document.body.offsetWidth)
: 0;
const docElementMax = document.documentElement
? Math.max(
document.documentElement.scrollWidth,
document.documentElement.offsetWidth,
document.documentElement.clientWidth
)
: 0;
return Math.max(bodyMax, docElementMax);
};
นอกจากนี้ที่สำคัญในการตอบ Travis '; คุณต้องวาง getWidth () ไว้ในเนื้อความเอกสารของคุณเพื่อให้แน่ใจว่านับความกว้างของแถบเลื่อนมิฉะนั้นความกว้างของแถบเลื่อนของเบราว์เซอร์จะถูกลบออกจาก getWidth () ฉันทำอะไรลงไป ;
<body>
<script>
function getWidth(){
return Math.max(document.body.scrollWidth,
document.documentElement.scrollWidth,
document.body.offsetWidth,
document.documentElement.offsetWidth,
document.documentElement.clientWidth);
}
var aWidth=getWidth();
</script>
</body>
และเรียกตัวแปร aWidth ที่ใดก็ได้หลังจากนั้น