H5 密码 调起安全键盘 导致页面底部出现留白

本文详细描述了在使用小米手机的微信中,因系统默认安全键盘引起的页面留白bug。通过将密码输入框类型从password更改为text,并结合JavaScript实现实时密码输入监测与格式化,成功解决了兼容性问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

bug情况:使用米8的微信打开登录页,当输入密码时,会调起系统默认的小米安全键盘,偶发性出现键盘已收起,但页面未落下,底部原输入法位置变为空白。如下图: 

首先尝试通用解决方式,如:

https://www.jianshu.com/p/c8f3a4036251

https://blog.csdn.net/a_small_insect/article/details/85162236

实践上述类型的解决方式,仍不稳定,经多次测试发现,全部是在输入密码时,安全键盘顶起页面导致页面出现留白。

猜测是系统默认安全键盘的问题,无法感应到键盘收起,使页面下滑。

在同事的vivo上也出现类似的问题,考虑到多种机型的兼容性问题,所以决定绕过input type="password"这种输入框类型,仍使用type="text",调起普通键盘即可。

html页面代码为:增加了type="hidden"用来存储密码

<input type="text" class="inputT" oninput="myPwd(this)" placeholder="请输入密码"/>
<input type="hidden"id="pwd" name="pwd"/>

js代码:通过对第一个密码输入框绑定oninput事件,实时监测密码格式并赋值给隐藏的密码输入框中

   function myPwd(e){
        var v= trim($(e).val());
        var pwdV = trim($("#pwd").val());
        var lastV = "";
        var totalV = "";
        var reg = /^[\u4e00-\u9fa5a-zA-Z0-9]+$/;
        if(v.length>pwdV.length){
            lastV = v.substr(v.length-1);
            if(reg.test(lastV)){
                totalV = pwdV + lastV +"";
            }else{
                totalV = pwdV;
            }
        }else if(v.length<pwdV.length){
            totalV = pwdV.substring(0,pwdV.length-1);
        }
        $("#pwd").val(totalV);
        var vDot = "";
        for(var i=0;i<totalV.length;i++){
            vDot += "•";
        }
        $(e).val(vDot);
    }

emmm...后来发现密码框改为text后,会出现另一个问题,全选密码删除或者替换等操作,无法即时更新密码。后续再寻找更好的解决办法吧。

H5开发中,当键盘弹出时,fixed布局的元素可能会出现布局错乱的问题。这是因为键盘弹出时,页面的可视区域发生变化,导致fixed定位的元素位置发生变化。为了解决这个问题,可以采取以下几种方法: 1. **使用绝对定位替代固定定位**:在某些情况下,可以将fixed定位改为absolute定位,并根据页面的滚动位置动态调整元素的位置。 2. **监听键盘事件**:通过监听键盘的弹出和收起事件,动态调整fixed元素的位置。例如,可以使用JavaScript监听`focus`和`blur`事件,或者使用`input`事件的`scroll`事件来调整布局。 3. **使用CSS的`vh`单位**:利用`vh`单位可以更好地适配同设备的高度,避免布局错乱。例如,可以将`height: 100%`改为`height: 100vh`。 4. **利用`position: sticky`**:`position: sticky`可以在元素滚动到一定位置时固定在视窗的某个位置,避免布局错乱。 以下是一个简单的示例代码,展示了如何通过监听键盘事件来调整fixed元素的位置: ```html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>H5调起键盘fixed布局问题</title> <style> .fixed-element { position: fixed; bottom: 0; width: 100%; background-color: #f0f0f0; text-align: center; padding: 10px; } .content { padding-bottom: 50px; /* 预留fixed元素的高度 */ } </style> </head> <body> <div class="content"> <input type="text" placeholder="点击输入框调起键盘"> <p>这里是内容部分</p> </div> <div class="fixed-element">固定在底部的元素</div> <script> const fixedElement = document.querySelector('.fixed-element'); const content = document.querySelector('.content'); window.addEventListener('resize', () => { if (window.innerHeight < screen.availHeight) { fixedElement.style.display = 'none'; content.style.paddingBottom = '0'; } else { fixedElement.style.display = 'block'; content.style.paddingBottom = '50px'; } }); </script> </body> </html> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值