【JS插件篇】解决IOS下H5页面 input 框点击不灵敏,需要多次点击或长按才能唤起软键盘的问题

前言

在开发H5页面时二次封装了antd mobile组件库中的searchBar组件,但在测试过程中发现,IOS下输入框经常无法选中,即无法唤起软键盘,需要多次点击或长按才能唤起,而安卓机及windowPC下则正常展示。

原因

刚开始以为是样式影响,但由于是进行了二次封装,在二次封装的组件库上并没有这个情况,antd mobile组件库中也没有该问题,想到应该是项目中产生的问题,排除项目中的样式问题后,通过查找网络上类似问题,猜测是fastClick的问题

解决方案

网上有两种方式修改:

  1. 找到node_module里的fastClick文件,修改focus方法,但此方法不建议,因为如果以后npm install,就会被覆盖。
  2. fastClick引用的地方,直接修改 js ,比如,我的项目中是在public下的index.html文件中引用,所以通过以下方式重写focus方法:
<script type="text/javascript" src="/lib/fastclick_1.0.6/fastclick.min.js"></script>
<script>
    /**
    * 重写FastClick的focus方法,用于解决IOS下input框唤启软键盘不灵敏问题
    */
    FastClick.prototype.focus = function(targetElement) {
      var length;
      // Issue #160: on iOS 7, some input elements (e.g. date datetime month) throw a vague TypeError on setSelectionRange. These elements don't have an integer value for the selectionStart and selectionEnd properties, but unfortunately that can't be used for detection because accessing the properties also throws a TypeError. Just check the type instead. Filed as Apple bug #15122724.
      if (deviceIsIOS && targetElement.setSelectionRange && targetElement.type.indexOf('date') !== 0 && targetElement.type !== 'time' && targetElement.type !== 'month' && targetElement.type !== 'email') {
          length = targetElement.value.length;
          targetElement.focus();// 加入这一句话
          targetElement.setSelectionRange(length, length);
      } else {
          targetElement.focus();
      }
    };
</script>

修改完成后,重新打包测试正常~

本文参考文章:https://zhuanlan.zhihu.com/p/69178052

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

章魚尐芄子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值