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

IOS设备中textarea聚焦时页面上移且无法恢复的问题求助

iOS Safari 文本框失焦后页面不回位的解决方案

针对iOS设备上textarea聚焦后页面上移、失焦无法恢复原位置的问题,试试以下几种可行的解决方法:

  • 记录滚动位置并延迟恢复
    iOS Safari的blur事件触发时,页面的滚动状态可能还未稳定,通过延迟执行滚动恢复可以规避这个问题:

    let savedScrollY;
    const targetTextarea = document.querySelector('textarea');
    
    targetTextarea.addEventListener('focus', () => {
      // 保存当前滚动位置
      savedScrollY = window.scrollY || document.documentElement.scrollTop;
    });
    
    targetTextarea.addEventListener('blur', () => {
      // 延迟100ms执行滚动,确保页面状态稳定
      setTimeout(() => {
        window.scrollTo(0, savedScrollY);
      }, 100);
    });
    
  • 固定body定位防止滚动偏移
    在textarea聚焦时将body设为固定定位,锁定当前滚动位置,失焦后恢复定位并还原滚动:

    const targetTextarea = document.querySelector('textarea');
    
    targetTextarea.addEventListener('focus', () => {
      const scrollY = window.scrollY || document.documentElement.scrollTop;
      document.body.style.position = 'fixed';
      document.body.style.top = `-${scrollY}px`;
      document.body.style.width = '100%'; // 避免宽度收缩
    });
    
    targetTextarea.addEventListener('blur', () => {
      const scrollY = parseInt(document.body.style.top);
      document.body.style.position = '';
      document.body.style.top = '';
      document.body.style.width = '';
      window.scrollTo(0, -scrollY);
    });
    
  • 优化viewport设置
    检查页面的viewport meta标签,确保包含viewport-fit=cover属性,部分场景下可以改善iOS的滚动行为:

    <meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover">
    
  • 排查父容器滚动冲突
    如果textarea嵌套在带有overflow: scroll的容器中,尝试给容器添加-webkit-overflow-scrolling: touch,同时确保容器没有设置过高的高度,避免和页面滚动产生冲突。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 05:45:24