移动端H5页面关于软键盘的一些踩坑记录

本文记录了移动端H5页面在实现留言功能时遇到的软键盘相关问题,包括点击完成或收起按钮时输入框不隐藏、滑动屏幕时输入框不隐藏、iOS复制功能的屏幕闪烁、页面跳转等。通过使用layer组件和监听键盘状态、调整布局等方式成功解决了这些问题。
摘要由CSDN通过智能技术生成

最近一个项目需要做一个留言的功能,需求很简单,点击留言按钮底部弹出留言框,然后发送留言给后台就行了,还有一个就是页面要实现复制功能。讨论需求的时候我预想到了手机上软键盘的弹出可能会有一些bug,不过需求比较急,就想着先做完再来改呗。很快做完之后,在电脑上测了没毛病,提测之后,bug刷刷的就来了:

1、手机ios或者Android微信,点击留言弹出输入框,点击完成或者收起按钮,或者安卓手机点击自带返回键,需要完整隐藏输入框;

2、手机ios或者Android微信,点击留言弹出输入框,滑动屏幕都要完整隐藏输入框;

3、IOS手机的复制按钮,点击后屏幕底部有弹框闪出;

4、手机ios或者Android微信,PC微信H5页面在页面下半部分点击复制,页面会跳转到顶部;

5、手机ios,点击留言,输入框会抖动;

6、手机ios点击留言弹出输入框后,此时点击屏幕关闭了输入框,再次点击留言按钮没有影响,直接界面卡死;

可以看到除了3、4是复制相关的,其他都是软键盘相关的,而这些还只是众多bug中有代表性的。。。开始改吧。

先看3、4的复制bug,一说到复制第一反应就是document.execCommand("Copy"),毕竟不需要任何其他组件,简单粗暴,可是在移动端ios出现了弹框瞬间闪出的bug,代码如下:

const btn = document.querySelector('#btn');
btn.addEventListener('click',() => {
    const input = document.createElement('input');
    document.body.appendChild(input);
    input.setAttribute('value', '听说你想复制我');
    input.select();
    if (document.execCommand('copy')) {
        document.execCommand('copy');
        console.log('复制成功');
    }
 document.body.removeChild(input);
})

在Chrome下调试的时候,这个方法时完美运行的。然后到了移动端调试的时候,坑就出来了。

对,没错,就是你,ios。。。

1、点击复制时屏幕下方会出现白屏抖动,仔细看是拉起键盘又瞬间收起

知道了抖动是由于什么产生的就比较好解决了。既然是拉起键盘,那就是聚焦到了输入域,那只要让输入域不可输入就好了,在代码中添加 input.setAttribute('readonly', 'readonly'); 使这个 <input> 是只读的,就不会拉起键盘了。

2、无法复制

这个问题是由于 input.select() 在ios下并没有选中全部内容,我们需要使用另一个方法来选中内容,这个方法就是 input.setSelectionRange(0, input.value.length);。

修改后的代码如下:

const btn = document.querySelector('#btn');
btn.addEventListener('click',() => {
    const input = document.createElement('input');
 input.setAttribute('readonly', 'readonly');
 input.setAttribute('value', 'hello world');
 document.body.appendChild(input);
    input.setSelectionRange(0, 9999);
    if (document.execCommand('copy')) {
        document.execCommand('copy');
        console.log('复制成功');
    }
 document.body.removeChild(input);
})

问题又来了,用了setSelectionRange这个方法,在pc端都不能复制了,然后我还是把它改成了input.select(),pc和移动端都能复制,不过ios里面的那个键盘突然闪出问题并不会因为设置了readonly而解决。而且关键是:手机ios或者Android微信,PC微信H5页面在页面下半部分点击复制,页面会跳转到顶部,所以这个execCommand方法并不好用,既然这样那我还是用个组件呗,直接就选择了clipboard.js,官网直接选择了通过属性复制,完美解决一切复制的b

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值