在最近的一个Hybrid App项目中,我实现的H5有以下两个需求:
Complex Labels
时,弹出下拉选项,下拉选项遮挡住了Complex Labels
,产品要求的效果是:当下拉选项弹出时不能遮挡住当前聚焦的表单项,也就是Complex labels
工具栏使用的是fixed定位,css如下所示:
#ql-toolbar {
position: fixed;
bottom: 10px;
left: 0;
right: 0;
z-index: 200;
}
复制代码
fixed
定位的元素是相对于屏幕视口(viewport)进行定位的,当H5嵌入到app的webview中进行展示时,可以理解为:fixed
是相对于webview进行定位的。
当光标聚焦到编辑区输入文字时,系统级的输入法键盘弹出,此时,键盘的弹出对webview的高度会有一定的影响,而android和ios对webview的处理有所不同,简单的说就是:
webview的高度 = 左图蓝色框的高度
,当键盘弹出时,webview的高度 = 右图蓝色框的高度 - 红色框键盘的高度
,也就是说webview的高度为绿色框的高度综上,当工具栏使用fixed
来定位时,在android上,当键盘弹出时webview的高度会减小,所以工具栏会悬浮在键盘之上,也就是说,在android上这么实现是符合需求的。但是,ios不会改变webview的高度,因此,当键盘弹出时,工具栏始终位于屏幕底部,从而被键盘遮挡,如此就不符合需求,所以,需要针对ios做特别处理
有以下三种解决方案:
总的来说这个问题并没有特别好的处理方式,或多或少都会存在一定问题,最终,我们确定的方案是由端来实现富文本编辑器,H5来实现编辑后的预览页面
对于文本输入框之所以不会遮挡,是因为文本输入框进行输入时,弹出的是系统级的输入法键盘,所以不会遮挡。但是对于下拉选项而言,弹出框的下拉选项是我们自己实现的,也就不是系统级的,所以,系统不会对其进行处理,如:将聚焦的输入框推动到可视范围之内,因此,会导致遮挡问题。
对于这个问题的解决需要分为以下几步:
源码 效果如下:
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。