H5ios输入框和键盘兼容性优化
时间:2023-04-04 23:44:51
HTML5
当focus事件触发原生键盘时,在部分ios机型上(iphone4siphone5等)),键盘会弹出并盖住输入框,用户体验不好。目前的解决方案是写一个定时任务。当判断ios打开页面时,执行如下函数lettimer=setInterval(()=>{//容器知道整个容器的dom节点container.scrollIntoView({block:'start',behavior:'auto'})},300);//300毫秒是经过多次实验得出的数值,用户体验较好。关于scrollIntoViewscrollIntoViewAPI,官方的解释是Element.scrollIntoView()方法将调用它的元素滚动到浏览器窗口的可见区域。语法element.scrollIntoView();//等同于element.scrollIntoView(true)element.scrollIntoView(alignToTop);//布尔参数element.scrollIntoView(scrollIntoViewOptions);//对象类型参数参数描述类型可选值默认值alignToTop--boolean---falsescrollIntoViewOptions--object----{behavior:"auto"|“即时”|“平滑”,块:“开始”|"end",}caniuse中找到scrollIntoView的兼容性(主流浏览器不考虑ie)Firefox36及以上兼容chrome61及以上兼容safiri5.1不兼容smooth后续问题在behavior中,这个解决方案当然可以智能地解决一些模型存在的问题。真正解决这个问题,还是要靠原生端。对于ios和安卓机型的问题,因为设置了这个定时任务,所以会有后续的问题,在落地项目中也遇到过,这里说明一下。向上拉或向下拉到头部时,会出现白底现象,因为有了这个定时器,会不断拉回视图,导致页面抖动。如果在app层禁止webview的拖动,就不会出现这个问题。当然,不能完全依赖该应用程序。我们还需要在程序中做这方面的兼容性优化。
touchStart(e){this.clearTimer();},touchEnd(e){this.repairIosInput();},clearTimer(){if(this.timer){clearInterval(this.timer);这个。计时器=空;}else{返回;}},repairIosInput(){if(this.timer){返回;}this.timer=setInterval(()=>{container.scrollIntoView({block:'start',behavior:'auto'})},300);}滚动开始时清空定时器,滚动停止时定时器开启,这样可以解决它带来的抖动问题。综上所述,作为一个长期存在的问题,会使用更多的解决方案,请联系我,一起讨论,尽快出坑!