作者:fdsafjlkjgklg_431 | 来源:互联网 | 2023-10-10 12:44
如果产品要求在移动端里有弹窗中多个ipnut,趁早找产品沟通不要弹窗,新起页面,此问题巨坑!一.经常是上下错位,原因是在input获取焦点以后,键盘弹出后,会把页面往上顶着移动,但
如果产品要求在移动端里有弹窗中多个ipnut,趁早找产品沟通不要弹窗,新起页面,此问题巨坑!
一.经常是上下错位,原因是在input 获取焦点以后,键盘弹出后,会把页面往上顶着移动,但是光标停留在了以前的位置,如果页面不复杂,可以在获取焦点后给body上添加 position:fixed ,使用后清除,但是这样会引起页面失去滚动能力,页面中尽量使用absolute,或者是float,还有flex。
二.还有一种情况就是页面中有了弹窗,在弹窗中有多个input(一般大于2个)标签,会出现光标左右平移,或者光标乱跳,点了第一个光标去了第二个, (1)、左右平移先给input加test-align:left;无效在找别的原因
(2)、此类问题大多解决办法都是把弹窗的fixed定位改为absolute 页面中不要出现fixed定位
(3)、或者是添加fastclick.js库,目前感觉此方法起不到什么作用。。
(4)、仔细观察页面,可以看到页面上的input先聚焦再滚动;也就是说,聚焦事件在页面滚动之前或者滚动完成之前就已经完成了,所以这时候页面滚动,而光标又不跟随滚动,就造成了光标跳行、错乱的问题。
解决方法:1、输入框在聚焦的时候,会弹起软键盘;所以,我们监听软键盘弹起事件,在弹起事件后,进行dom重绘,但是这种必须要加延时处理2、当页面出现滚动条时,弹框弹出后,页面回滚至顶部。在不改变原有弹框代码的情况下,有效地解决光标错位问题,但严重影响用户使用,可以给弹出层重新定位:获取滚动条高度,为弹窗重新设置top值;3、弹框采用absolute定位后,关键是top值的确定ios Safari 输入键盘弹出时,若页面底部被挤压上去,则关闭弹框会复原到页面滚动到底部时的状态,若底部没被挤压上去,每弹出一次键盘,页面都会上去一定距离,且不复原,可以阻止页面的touchmove事件来实现固定底部页面的想法,4、总结:给input加test-align:left;把页面所有fixed定位改为absolute,阻止页面滚动 或者 弹出后重新渲染页面 或者 监听更新弹窗top值 或者 在设计时不要在弹窗里多个input....巨坑!