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

如何仅监听窗口宽度变化?避免iOS Safari滚动触发resize事件

仅监听窗口宽度变化的最简实现

要实现仅在窗口宽度改变时触发事件,同时避免iOS Safari滚动时的误触发,核心思路是记录并对比前后的窗口宽度,只有宽度发生变化时才执行目标逻辑。以下是适配你当前使用window.onresize的最简实现:

代码实现

// 保存初始窗口宽度
let lastWindowWidth = window.innerWidth;

window.onresize = function(event) {
  const currentWidth = window.innerWidth;
  // 仅当宽度确实变化时执行逻辑
  if (currentWidth !== lastWindowWidth) {
    // 这里替换成你需要执行的代码
    console.log('窗口宽度已改变');
    // 更新记录的宽度,用于下次对比
    lastWindowWidth = currentWidth;
  }
};

原理说明

iOS Safari在向下滚动时,地址栏或状态栏的隐藏/显示会导致窗口高度变化,进而触发resize事件,但此时窗口宽度并未改变。通过对比lastWindowWidth和当前的window.innerWidth,就能过滤掉这种仅高度变化的误触发场景,只在宽度真正改变时执行你的业务逻辑。

扩展:使用addEventListener的版本

如果你后续切换到addEventListener方式,逻辑完全一致:

let lastWindowWidth = window.innerWidth;

window.addEventListener('resize', function(event) {
  const currentWidth = window.innerWidth;
  if (currentWidth !== lastWindowWidth) {
    // 执行你的业务逻辑
    lastWindowWidth = currentWidth;
  }
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 16:49:58