h5中ios输入框和键盘兼容性优化的示例分析

发布时间:2021-09-14 09:46:05 作者:小新
来源:亿速云 阅读:156

这篇文章给大家分享的是有关h5中ios输入框和键盘兼容性优化的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

业务场景

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

无论是使用

<input />

还是

 <div contenteditable="true">
 </div>

在聚焦事件触发调起原生键盘时,在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)

后续问题

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

在ios 和 安卓机型的问题

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

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

 <div class="container"
   @touchStart="touchStart($event)"
   @touchEnd="touchEnd($event)">
 
 </div>
 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);
 }

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

感谢各位的阅读!关于“h5中ios输入框和键盘兼容性优化的示例分析”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

推荐阅读:
  1. 如何解决H5虚拟键盘挡住输入框的问题
  2. javascript兼容性的示例分析

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

html5 ios

上一篇:如何解决php imagepng输出不了的问题

下一篇:怎样使用php中的json去掉转义字符

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》