讲师中心 微信公众号

工具推荐

视频效率加速
Seko
Seko

AI短剧一键生成成片

AniShort
AniShort

AI短剧协同制作平台

updream

一键生成高质量推广成片

剧云
剧云

中文短剧剧本制作平台

js怎么获取浏览器窗口大小

夏杰同学_3200

夏杰同学_3200

发布时间:2025-08-23 14:42:02

|

1138人浏览过

|

来源于php中文网

原创

获取javascript中浏览器窗口大小不包括滚动条,使用window.innerwidth和window.innerheight可直接获取可视区域宽高;1. 标准模式下推荐使用window.innerwidth/height或document.documentelement.clientwidth/height;2. 兼容性处理应结合window.innerwidth、documentelement.clientwidth和body.clientwidth;3. 区分标准与怪异模式可通过document.compatmode判断,css1compat为标准模式,backcompat为怪异模式;4. 移动端虚拟键盘影响窗口高度,需监听resize事件并结合visualviewport api或env()函数处理布局变化,确保输入区域可见且页面表现正常。

js怎么获取浏览器窗口大小

获取JavaScript中浏览器窗口大小,直接点说,用

window.innerWidth
和
window.innerHeight
就能拿到可视区域的宽高,简单粗暴。

js怎么获取浏览器窗口大小

解决方案:

要精确地获取浏览器窗口大小,需要考虑不同的浏览器和文档模式。以下是一些常用的方法:

js怎么获取浏览器窗口大小
  1. 使用

    window.innerWidth
    和
    window.innerHeight
    :
    这是最直接的方法,返回浏览器窗口的内部宽度和高度,不包括滚动条、边框等。

    let width = window.innerWidth;
    let height = window.innerHeight;
    
    console.log("Width: " + width + ", Height: " + height);
  2. 使用

    document.documentElement.clientWidth
    和
    document.documentElement.clientHeight
    :
    在标准模式下,这两个属性返回的是
    <html>
    元素(根元素)的可见区域大小,与
    window.innerWidth
    和
    window.innerHeight
    效果相同。

    js怎么获取浏览器窗口大小
    let width = document.documentElement.clientWidth;
    let height = document.documentElement.clientHeight;
    
    console.log("Width: " + width + ", Height: " + height);
  3. 使用

    document.body.clientWidth
    和
    document.body.clientHeight
    :
    在怪异模式(quirks mode)下,这两个属性返回的是
    <body>
    元素的可见区域大小。 但要注意,在标准模式下,它们可能返回0,或者内容撑开的大小。

    let width = document.body.clientWidth;
    let height = document.body.clientHeight;
    
    console.log("Width: " + width + ", Height: " + height);
  4. 兼容性处理: 为了确保在各种浏览器和文档模式下都能正确获取窗口大小,可以结合以上方法进行兼容性处理。

    function getWindowWidth() {
      return window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth;
    }
    
    function getWindowHeight() {
      return window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight;
    }
    
    let width = getWindowWidth();
    let height = getWindowHeight();
    
    console.log("Width: " + width + ", Height: " + height);
  5. 监听窗口大小变化: 使用

    window.addEventListener('resize', callback)
    可以监听窗口大小的变化,并在变化时执行回调函数。

    window.addEventListener('resize', function() {
      let width = getWindowWidth();
      let height = getWindowHeight();
      console.log("Window resized. Width: " + width + ", Height: " + height);
    });

需要注意的是,

window.outerWidth
和
window.outerHeight
返回的是整个浏览器窗口的大小,包括边框、工具栏等,通常不用于获取可视区域大小。另外,移动端设备上的虚拟键盘可能会影响窗口高度,需要特别处理。

JavaScript获取到的浏览器窗口大小包括滚动条吗?

一般来说,

window.innerWidth
和
window.innerHeight
返回的是不包括滚动条的浏览器可视区域大小。也就是说,即使页面有滚动条,这两个属性返回的宽高也是不包含滚动条所占据的空间的。 但是,如果滚动条是始终可见的(例如,通过CSS设置),那么
window.innerWidth
和
window.innerHeight
的值可能会受到影响,因为它们反映的是实际可用的像素空间。

而

document.documentElement.clientWidth
和
document.documentElement.clientHeight
在标准模式下也同样不包含滚动条。但在怪异模式下,行为可能不一致,具体取决于浏览器的实现。

如果需要精确地知道滚动条的宽度,可以使用以下方法:

function getScrollbarWidth() {
  // 创建一个带有滚动条的 div 元素
  const scrollDiv = document.createElement("div");
  scrollDiv.style.width = "100px";
  scrollDiv.style.height = "100px";
  scrollDiv.style.overflow = "scroll";
  scrollDiv.style.position = "absolute";
  scrollDiv.style.top = "-9999px"; // 移出可视区域
  document.body.appendChild(scrollDiv);

  // 获取滚动条宽度
  const scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth;

  // 移除 div 元素
  document.body.removeChild(scrollDiv);

  return scrollbarWidth;
}

const scrollbarWidth = getScrollbarWidth();
console.log("Scrollbar width: " + scrollbarWidth);

如何区分浏览器的标准模式和怪异模式?

区分浏览器的标准模式(Standards Mode)和怪异模式(Quirks Mode)主要依赖于文档类型声明(DOCTYPE declaration)。DOCTYPE 声明位于HTML文档的开头,用于告诉浏览器使用哪个HTML或XHTML规范来解析和渲染页面。

  • 标准模式: 当HTML文档包含一个完整的、有效的DOCTYPE声明时,浏览器会以标准模式渲染页面。这意味着浏览器会按照最新的HTML和CSS规范来解析和渲染页面,尽可能地保持一致性和可预测性。

    例如:

    CDP浏览器大师
    CDP浏览器大师

    CDP浏览器大师:通过Chrome DevTools Protocol驱动已登录浏览器实现自动化任务,解决反爬封号、选择器失效、SPA路由难导航、固定sleep不准四大痛点。核心能力包括UA伪装、WebGL/Canvas指纹混淆、智能等待、动态选择器以及可视化调试。

    下载
    <!DOCTYPE html>

    或者:

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
  • 怪异模式: 当HTML文档缺少DOCTYPE声明,或者DOCTYPE声明不完整或无效时,浏览器会以怪异模式渲染页面。在怪异模式下,浏览器会模拟旧版本的浏览器的行为,以向后兼容旧的网页。这可能导致页面在不同浏览器之间呈现出不一致的效果。

    例如:

    <html>  <!-- 缺少 DOCTYPE 声明 -->
    <head>
    <title>My Page</title>
    </head>
    <body>
    </body>
    </html>

可以通过JavaScript来检测当前浏览器处于哪种模式:

function getDocumentMode() {
  if (document.compatMode === 'CSS1Compat') {
    return 'Standards Mode';
  } else if (document.compatMode === 'BackCompat') {
    return 'Quirks Mode';
  } else {
    return 'Unknown Mode';
  }
}

console.log('Document Mode: ' + getDocumentMode());

document.compatMode
属性返回一个字符串,表示浏览器使用的渲染模式。
CSS1Compat
表示标准模式,
BackCompat
表示怪异模式。

在实际开发中,始终建议使用完整的、有效的DOCTYPE声明,以确保浏览器以标准模式渲染页面,从而避免各种兼容性问题。

移动端如何处理虚拟键盘对窗口大小的影响?

移动端虚拟键盘的弹出和隐藏会改变浏览器窗口的可视区域高度,这可能会导致页面布局错乱或元素位置不正确。 处理这个问题,需要监听

resize
事件,并采取相应的措施。

  1. 监听

    resize
    事件: 当虚拟键盘弹出或隐藏时,会触发
    window
    对象的
    resize
    事件。可以监听这个事件来检测窗口大小的变化。

    window.addEventListener('resize', function() {
      // 在这里处理窗口大小变化
      let windowHeight = window.innerHeight;
      console.log('Window height: ' + windowHeight);
    });
  2. 获取可视区域高度: 在

    resize
    事件处理函数中,获取当前的可视区域高度。可以使用
    window.innerHeight
    或
    document.documentElement.clientHeight
    。

  3. 判断键盘是否弹出: 比较窗口初始高度和当前高度。如果当前高度明显小于初始高度,则可以认为键盘已经弹出。 但是,仅仅比较高度是不够的,因为用户手动调整窗口大小也会触发

    resize
    事件。因此,需要结合其他方法来判断键盘是否弹出。

  4. 使用

    visualViewport
    API:
    visualViewport
    API 提供了更精确的关于可视区域的信息,包括键盘弹出时可视区域的变化。 这个API目前兼容性还不是特别好,需要做兼容性处理。

    if (window.visualViewport) {
      window.visualViewport.addEventListener('resize', function() {
        let viewportHeight = window.visualViewport.height;
        console.log('Visual viewport height: ' + viewportHeight);
      });
    }
  5. 使用 CSS

    env()
    函数: CSS
    env()
    函数可以访问环境变量,包括
    safe-area-inset-*
    变量,这些变量表示安全区域的内边距。 通过这些变量,可以计算出键盘弹出时可视区域的变化。 但同样存在兼容性问题。

  6. 调整页面布局: 当检测到键盘弹出时,可以调整页面布局,例如:

    • 固定底部元素的位置,防止被键盘遮挡。
    • 滚动页面,使输入框可见。
    • 调整元素的高度或宽度,以适应新的可视区域。
  7. 延迟处理: 在某些情况下,

    resize
    事件可能会被频繁触发。可以使用
    setTimeout
    函数来延迟处理,以避免性能问题。

    let resizeTimeout;
    window.addEventListener('resize', function() {
      clearTimeout(resizeTimeout);
      resizeTimeout = setTimeout(function() {
        // 在这里处理窗口大小变化
        let windowHeight = window.innerHeight;
        console.log('Window height: ' + windowHeight);
      }, 250); // 延迟 250 毫秒
    });
  8. meta 标签设置: 有些 meta 标签可以影响移动端浏览器的行为,例如:

    • <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
      :这个 meta 标签可以禁止用户缩放页面,从而避免键盘弹出时页面缩放导致的问题。
    • <meta name="apple-mobile-web-app-capable" content="yes">
      :这个 meta 标签可以让网页以应用模式运行,从而隐藏浏览器的地址栏和工具栏,提供更大的可视区域。

总的来说,处理移动端虚拟键盘对窗口大小的影响需要综合考虑多种因素,包括监听

resize
事件、获取可视区域高度、判断键盘是否弹出、使用
visualViewport
API、使用 CSS
env()
函数、调整页面布局和延迟处理。

热门AI工具

更多
豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

超级麦吉

一款通过数字员工协作完成调研、数据分析与文档制作的AI办公平台。

Flowith
Flowith Hot

Flowith是一款基于画布和智能体工作流的 AI 协作工作空间。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

墨刀AI
墨刀AI Hot

一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

相关专题

更多
js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

1918

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

3144

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

6364

2023.10.24

字符串介绍
字符串介绍

字符串是一种数据类型,它可以是任何文本,包括字母、数字、符号等。字符串可以由不同的字符组成,例如空格、标点符号、数字等。在编程中,字符串通常用引号括起来,如单引号、双引号或反引号。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

6489

2023.11.24

java读取文件转成字符串的方法
java读取文件转成字符串的方法

Java8引入了新的文件I/O API,使用java.nio.file.Files类读取文件内容更加方便。对于较旧版本的Java,可以使用java.io.FileReader和java.io.BufferedReader来读取文件。在这些方法中,你需要将文件路径替换为你的实际文件路径,并且可能需要处理可能的IOException异常。想了解更多java的相关内容,可以阅读本专题下面的文章。

8034

2024.03.22

php中定义字符串的方式
php中定义字符串的方式

php中定义字符串的方式:单引号;双引号;heredoc语法等等。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

12434

2024.04.29

go语言字符串相关教程
go语言字符串相关教程

本专题整合了go语言字符串相关教程,阅读专题下面的文章了解更多详细内容。

6439

2025.07.29

c++字符串相关教程
c++字符串相关教程

本专题整合了c++字符串相关教程,阅读专题下面的文章了解更多详细内容。

7227

2025.08.07

Go-Zero API开发使用教程
Go-Zero API开发使用教程

本专题聚焦Go-Zero的API开发,拆解.api描述文件的语法结构、路由与分组定义、参数绑定与校验规则,说明统一响应体、JWT鉴权、跨域与接口文档生成的落地方式,并给出网关聚合与接口测试的实践建议。

0

2026.11.12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn