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

如何在iOS中用JavaScript/jQuery计算键盘高度或实际视口高度?

在iOS中用JavaScript/jQuery获取键盘高度或实际视口高度的方案

其实在iOS里不是完全没办法实现,只是它的行为和Android不一样——确实不会触发$(window).resize(),但我们可以利用Web API的特性来搞定。

一、首选方案:使用Visual Viewport API(iOS 11+支持)

这个API是专门用来处理视觉视口变化的,键盘弹出/收起时会直接改变视觉视口的高度,完美适配iOS的情况。你可以监听它的resize事件来计算键盘高度,或者直接获取实际可用的视口高度:

// 监听视觉视口的尺寸变化
window.visualViewport.addEventListener('resize', () => {
  // 获取当前实际可用的视口高度(已经排除键盘占用的空间)
  const actualViewportHeight = window.visualViewport.height;
  // 计算键盘高度:原始窗口高度减去当前视觉视口高度
  const keyboardHeight = window.innerHeight - actualViewportHeight;
  
  console.log('当前实际视口高度:', actualViewportHeight);
  console.log('键盘高度:', keyboardHeight);
});

二、结合输入框焦点事件做精准监听

如果只需要在用户激活输入框时获取键盘高度,可以结合focusin和focusout事件,配合延迟确保键盘完全弹出:

// 保存初始的窗口高度
let originalWindowHeight = window.innerHeight;

// 监听输入框聚焦事件
document.addEventListener('focusin', (event) => {
  // 只处理输入框和文本域
  const target = event.target;
  if (target.tagName === 'INPUT' || target.tagName === 'TEXTAREA') {
    // 延迟100ms,等待键盘完全弹出后再计算
    setTimeout(() => {
      const currentViewportHeight = window.visualViewport.height;
      const keyboardHeight = originalWindowHeight - currentViewportHeight;
      console.log('键盘高度:', keyboardHeight);
    }, 100);
  }
});

// 监听输入框失焦事件,重置初始高度
document.addEventListener('focusout', () => {
  originalWindowHeight = window.innerHeight;
});

关键注意点

  • 不要用window.innerHeight来判断键盘弹出后的视口高度,iOS中这个值不会随键盘弹出改变,而visualViewport.height才是实际可用的空间高度。
  • Visual Viewport API从iOS 11开始支持,现在iOS 11以下的版本用户占比极低,这个方案基本可以覆盖绝大多数场景。
  • 延迟setTimeout是为了避免键盘还没完全弹出就计算高度,导致数值不准确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:09:34