其他分享
首页 > 其他分享> > 移动端软盘遮盖输入框的解决方案

移动端软盘遮盖输入框的解决方案

作者:互联网

手机端在向页面输入内容时,我们希望点击输入框聚焦后页面能自动定位,将输入框移至可见区域内。
请添加图片描述

如上图所示,如果点击输入框,这时候手机会调起软盘,那么软盘会盖住输入框,这样用户体验不好。
避坑指南

const originalHeight = document.documentElement.clientHeight || document.body.clientHeight;
window.addEventListener('resize', () => {
  const resizeHeight = document.documentElement.clientHeight || document.body.clientHeight;
  if (resizeHeight >= originalHeight) {
       //键盘收起
  }else {
      //键盘弹起
  }
});
 <textarea
   className={classNames('textarea-card-area', className)}
   placeholder={placeholder}
   value={value}
   onFocus={e => {
     onFocusChange?.(true, e.target);
     setTimeout(() => {
       if (e.target) {
         e.target.scrollIntoView();
       }
     }, 200);
   }}
   onBlur={() => {
     onFocusChange?.(false);
   }}
   
 />
 <div className={classNames('textarea-card')}>
  {/* 该 div 的作用是保证键盘弹起 textarea 居中 */}
  <div className="place-flag" ref={placeFlagRef}></div>
  <textarea
    className={classNames('textarea-card-area', className)}
    placeholder={placeholder}
    value={value}
    onFocus={e => {
      onFocusChange?.(true, e.target);
      setTimeout(() => {
        if (placeFlagRef.current) {
          placeFlagRef.current.scrollIntoView();
        }
      }, 200);
    }}
    onBlur={() => {
      onFocusChange?.(false);
    }}
    onChange={e => {
      // onchange事件
    }}
    maxLength={maxlength}
  />
 // 其他代码
</div>

此时让上面的divscrollIntoView到顶部,这个div通过position:absolute 设置-50px,这个距离可以设置为header的高度,那么刚好就让输入框移至到可视区,并且没有被header挡住。

标签:header,scrollIntoView,输入框,弹起,软盘,遮盖,页面
来源: https://blog.csdn.net/weixin_43213137/article/details/122174670