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

是否存在可检测浏览器窗口高度变化的DOM事件监听器?

仅监听浏览器窗口高度变化的实现方案

你可以通过封装原生resize事件 + 自定义事件的方式实现需求,只在窗口高度发生变更时触发回调,实现步骤如下:

实现代码

首先在全局执行以下封装代码,注册自定义的onHeightResizeOnly事件:

// 存储上一次窗口高度的初始值
let lastWindowHeight = window.innerHeight;

// 防抖函数:可根据需求调整延迟时间,不需要防抖可以直接移除这部分逻辑
const debounce = (handler, wait = 150) => {
  let timeoutId;
  return function(...args) {
    clearTimeout(timeoutId);
    timeoutId = setTimeout(() => handler.apply(this, args), wait);
  };
};

// 监听原生resize事件,判断高度变更后触发自定义事件
window.addEventListener('resize', debounce(() => {
  const currentHeight = window.innerHeight;
  // 仅当高度发生变化时触发自定义事件
  if (currentHeight !== lastWindowHeight) {
    lastWindowHeight = currentHeight;
    window.dispatchEvent(new CustomEvent('onHeightResizeOnly', {
      detail: {
        height: currentHeight
      }
    }));
  }
}));

使用方式

封装完成后就可以用你期望的方式监听高度变化了:

window.addEventListener("onHeightResizeOnly", () => {
  console.log(window.innerHeight);
});

// 也可以直接从事件参数中拿到当前高度
window.addEventListener("onHeightResizeOnly", (e) => {
  console.log('当前窗口高度:', e.detail.height);
});

注意事项

  • 不需要防抖效果的话,直接去掉debounce包装即可,resize事件触发时会实时判断高度变化
  • 该自定义事件的触发逻辑和原生resize一致,移动端浏览器地址栏收起展开、PC端窗口拖拽改高度等场景都会正常触发
  • 如需兼容IE等不支持CustomEvent的老旧浏览器,可以添加CustomEvent polyfill适配

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 15:54:03