You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用JavaScript或CSS检测浏览器是否处于最大化状态?

实现浏览器全屏/最大化状态下启用滚动吸附

问题背景

我正在制作一个用于客户端大型显示器/电视静态展示的仪表盘,核心需求是:仅在浏览器全屏或最大化/拉伸至屏幕全高状态时启用滚动吸附(snap-scroll)特性,其他状态下禁用该特性。

全屏状态可以通过CSS媒体查询直接实现:

@media all and (display-mode: fullscreen) {
  /* 全屏下启用滚动吸附 */
  .dashboard-container {
    scroll-snap-type: y mandatory;
  }
  .dashboard-section {
    scroll-snap-align: start;
  }
}

但浏览器最大化状态无法通过纯CSS检测——device-height属性已被废弃,需要结合JavaScript来判断窗口是否占满屏幕全高。

解决方案:JS检测窗口状态 + 动态切换CSS类

核心思路是通过JS对比浏览器可视高度与系统可用屏幕高度,判断窗口是否处于最大化/全高状态,再通过添加/移除CSS类来控制滚动吸附的启用与禁用。

1. 完整实现代码

HTML结构示例

<div class="dashboard-container">
  <section class="dashboard-section">面板1</section>
  <section class="dashboard-section">面板2</section>
  <section class="dashboard-section">面板3</section>
</div>

CSS样式

/* 默认状态:禁用滚动吸附 */
.dashboard-container {
  height: 100vh;
  overflow-y: auto;
  scroll-snap-type: none;
}
.dashboard-section {
  height: 100vh;
}

/* 全屏状态:启用滚动吸附 */
@media all and (display-mode: fullscreen) {
  .dashboard-container {
    scroll-snap-type: y mandatory;
  }
  .dashboard-section {
    scroll-snap-align: start;
  }
}

/* JS标记的全高/最大化状态:启用滚动吸附 */
.dashboard-container.is-full-height {
  scroll-snap-type: y mandatory;
}
.dashboard-container.is-full-height .dashboard-section {
  scroll-snap-align: start;
}

JavaScript逻辑

const dashboardContainer = document.querySelector('.dashboard-container');

// 判断窗口是否处于全高状态
function checkFullHeightStatus() {
  // 计算浏览器可视高度与系统可用屏幕高度的差值
  const heightDiff = Math.abs(window.innerHeight - window.screen.availHeight);
  // 差值小于5px时判定为全高(兼容浏览器边框、标题栏的微小高度差)
  const isFullHeight = heightDiff < 5;

  isFullHeight 
    ? dashboardContainer.classList.add('is-full-height') 
    : dashboardContainer.classList.remove('is-full-height');
}

// 初始化检测
checkFullHeightStatus();
// 监听窗口大小变化
window.addEventListener('resize', checkFullHeightStatus);
// 监听全屏状态切换,确保样式同步
document.addEventListener('fullscreenchange', checkFullHeightStatus);

2. 关键细节说明

  • window.screen.availHeight会自动排除系统任务栏、菜单栏等占用的空间,无需额外计算。
  • 设置5px的误差阈值,是为了避免因浏览器窗口边框、标题栏的微小高度差异导致类名频繁切换。
  • 同时监听fullscreenchange事件,确保全屏状态切换时样式能同步更新。

内容的提问来源于stack exchange,提问作者nicholowen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 05:25:05