博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
h5 ios输入框与键盘 兼容性优化
阅读量:6894 次
发布时间:2019-06-27

本文共 1874 字,大约阅读时间需要 6 分钟。

起因

h5的输入框引起键盘导致体验不好,目前就算微信、知乎、百度等产品也没有很好的技术方案实现,尤其底部固定位置的输入框各种方案都用的前提下体验也并没有很好,这个问题也是老大难问题了。目前在准备一套与native协议 来解决这个问题,目前项目中的解决方案还是有值得借鉴的地方的,分享一下

业务场景

固定在h5页面底部的输入框

无论是使用

复制代码

还是

复制代码

在聚焦事件触发调起原生键盘时,在ios部分机型(iphone 4s iphone 5等)上会使得键盘弹起后遮挡住输入框,使得用户体验不好。

目前的解决方案是写一个定时任务,在判定是ios打开页面时,执行以下函数

let timer = setInterval(()=>{    // container 知道整个容器的dom节点     container.scrollIntoView({         block: 'start',        behavior: 'auto'     })},300); //300毫秒是经过多次试验得到的数值,用户体验为佳复制代码

关于scrollIntoView

scrollIntoView这个API,官方的解释是 The Element.scrollIntoView() method scrolls the element on which it's called into the visible area of the browser window. 语法

element.scrollIntoView(); // 等同于element.scrollIntoView(true) element.scrollIntoView(alignToTop); // Boolean型参数 element.scrollIntoView(scrollIntoViewOptions); // Object型参数复制代码

参数

参数 说明 类型 可选值 默认值
alignToTop -- boolean --- false
scrollIntoViewOptions -- object -- --
{    behavior: "auto"  | "instant" | "smooth",    block:    "start" | "end",}复制代码

在can i use中查到的scrollIntoView的兼容性(主流浏览器中不考虑ie)

  • Firefox 36 以上兼容
  • chrome 61 以上兼容
  • safiri 5.1开始 不兼容behavior中的smooth

后续问题

当然,这个解决方案智能解决部分机型的问题,要真正解决这个问题还是要依靠native端。

在ios 和 安卓机型的问题

因为设置了这个定时任务,就会有一个后续的问题出现,也是在落地项目中有遇到过的,在此说明一下。


在上拉或下拉到头时,会出现背景白色的现象,因为有了这个定时器,它就会不断将视图拉回,导致页面抖动。 如果在app层做了webview禁止拖动的话就不会有这个问题,当然不能完全依赖app,在程序中我们也需要做此方面的兼容优化。

复制代码
touchStart(e) {    this.clearTimer(); }, touchEnd(e) {    this.repairIosInput(); }, clearTimer() {     if(this.timer) {         clearInterval(this.timer);         this.timer = null;     }else{         return;     } }, repairIosInput() {     if(this.timer) {         return;     }     this.timer = setInterval(()=>{          container.scrollIntoView({             block: 'start',            behavior: 'auto'         })     },300); }复制代码

在开始拉动页面时清空定时器,停止拉动时开启定时器,这样就可以解决造成的抖动的问题了。

总结

做为一个老大难的问题,还会用更多的解决方案,请与我联系,一起讨论,早日脱坑!

转载地址:http://ajudl.baihongyu.com/

你可能感兴趣的文章
mysql 不同索引的区别和适用情况总结
查看>>
day01 认识python变量 数据类型 条件if语句
查看>>
【算法学习笔记】38.最短路问题 SJTU OJ 1105 path
查看>>
MarkDown写blog(测试)
查看>>
linux主机名 hostname
查看>>
[转]浅论Maven和Git的原理及展示其与Eclipse的集成
查看>>
盒子模型
查看>>
for in遍历对象属性注意事项
查看>>
Module not found: Error: Can't resolve 'XXX' in 'XXXX'
查看>>
Mac Mysql 修改初始化密码
查看>>
textarea 禁止拉伸
查看>>
js 常用正则表达式表单验证代码
查看>>
【ShaderToy】基础篇之再谈抗锯齿(antialiasing,AA)
查看>>
常见中文字体的英文名
查看>>
你不知道的JavaScript(四)数值
查看>>
Spring的Restful
查看>>
令人吐血的string.format 对齐问题
查看>>
Notepad++中直接运行python
查看>>
Error:java: Compilation failed: internal java compiler
查看>>
bzoj2821作诗
查看>>