当前位置: 首页 > Web前端 > HTML5

H5ios输入框和键盘兼容性优化

时间:2023-04-04 23:44:51 HTML5

原因是h5输入框导致键盘使用体验不好。目前连微信、知乎、百度等产品都没有很好的技术解决方案,尤其是底部固定位置的输入框,在使用各种方案的前提下,体验都不是很好,而这个问题就是也是一个长期存在的问题。我们目前正在准备一套原生协议来解决这个问题。项目中目前的解决方案还是有值得借鉴的地方。我来分享一下业务场景。h5页面底部固定的输入框使用

当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);}滚动开始时清空定时器,滚动停止时定时器开启,这样可以解决它带来的抖动问题。综上所述,作为一个长期存在的问题,会使用更多的解决方案,请联系我,一起讨论,尽快出坑!