处理ios软键盘弹起和收起时页面滚动问题

本文讲述了在开发中遇到的iOS软键盘触发页面滚动的问题,通过理解iOS与Android键盘行为差异,发现关键在于锁定主内容滚动。通过设置页面fixed,解决了添加主播后页面定位问题,同时避免了输入框聚焦时的滚动混乱。
摘要由CSDN通过智能技术生成

处理ios软键盘弹起和收起时页面滚动问题

背景:

在开发添加主播功能时,页面底部需要弹出一个抽屉弹窗,点击抽屉上的输入框,会唤起软键盘,由于iOS的软键盘触发方式是将页面滚动,所以导致页面位置偏移

bug描述:

<必现>iOS:添加主播成功后 页面会定位在节目设置页的最底部

解决过程:

经过google看了一大堆资料,找到了核心原因,就是ios的滚动scroll 效应。

网络上有大量的解决方案是获取当前页面的滚动高度(scrolltop),然后在页面outfocus时,使用window.scroll把页面滚动回去。

但是这个方法会存在很多问题

  1. 由于本身该页面就存在一个底部抽屉组件,scroll回去的时候页面滚动效果非常明显,页面就像重新渲染了一次,抽屉会重新弹起,体验非常差。
  2. outfocus不太稳定,页面上有select和其他输入的时候,弹起选择框,也会触发onfocus,整个页面就乱滚

核心问题其实是底下的主内容在乱动,所以把它固定住不要让他滚动就好了,所以最后还是选择在底部弹窗出现的时候把整个页面fixed固定住,阻止整个内容滚动。

  1. 获取弹窗出现是页面的scrolltop
  2. 弹窗出现时设置style:position:fixed; top:-scrollTop;
  3. 弹窗消失时,恢复原本的页面定位,并用window.scroll(0, scrollTop)恢复到原先页面的位置。

iOSAndroid软键盘弹起/收起的不同形式:

IOS 上,

输入框(inputtextarea 或 富文本)获取焦点,软键盘弹起,页面(webview)并没有被压缩,或者说高度(height)没有改变,只是页面(webview)整体往上滚了,且最大滚动高度(scrollTop)为软键盘高度。

触发软键盘上的“收起/完成”按钮键盘或者输入框以外的页面区域时,输入框失去焦点,软键盘收起。注意:页面依然是键盘弹起时scroll到的位置。

Android上,

输入框获取焦点,键盘弹起,但是页面(webview)高度会发生改变,一般来说,高度为可视区高度(原高度减去软键盘高度),除了因为页面内容被撑开可以产生滚动,webview本身不能滚动。

触发输入框以外的区域时,输入框失去焦点,软键盘收起。但是,触发键盘上的收起按钮键盘时,输入框并不会失去焦点,同样软键盘收起。页面恢复正常。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值