0

0

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

幻夢星雲

幻夢星雲

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

|

1078人浏览过

|

来源于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
    在标准模式下,这两个属性返回的是
    元素(根元素)的可见区域大小,与
    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)下,这两个属性返回的是
    元素的可见区域大小。  但要注意,在标准模式下,它们可能返回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规范来解析和渲染页面,尽可能地保持一致性和可预测性。

    例如:

    网易人工智能
    网易人工智能

    网易数帆多媒体智能生产力平台

    下载

    或者:

  • 怪异模式: 当HTML文档缺少DOCTYPE声明,或者DOCTYPE声明不完整或无效时,浏览器会以怪异模式渲染页面。在怪异模式下,浏览器会模拟旧版本的浏览器的行为,以向后兼容旧的网页。这可能导致页面在不同浏览器之间呈现出不一致的效果。

    例如:

      
    
    My Page
    
    
    
    

可以通过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 标签可以禁止用户缩放页面,从而避免键盘弹出时页面缩放导致的问题。
    • :这个 meta 标签可以让网页以应用模式运行,从而隐藏浏览器的地址栏和工具栏,提供更大的可视区域。

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

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

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

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

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

320

2023.08.03

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

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

212

2023.09.04

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

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

1503

2023.10.24

字符串介绍
字符串介绍

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

625

2023.11.24

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

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

655

2024.03.22

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

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

610

2024.04.29

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

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

172

2025.07.29

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

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

83

2025.08.07

漫画免费在线观看地址大全
漫画免费在线观看地址大全

想找免费又资源丰富的漫画网站?本合集精选2025-2026年热门平台,涵盖国漫、日漫、韩漫等多类型作品,支持高清流畅阅读与离线缓存。阅读专题下面的文章了解更多详细内容。

1

2026.01.31

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
黑马程序员JavaScript视频教程
黑马程序员JavaScript视频教程

共107课时 | 28万人学习

极客学院Python视频教程
极客学院Python视频教程

共67课时 | 23.1万人学习

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

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号