视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
移动web如何实现类似客户端多方框输入密码功能
2020-11-27 16:41:38 责编:小采
文档
不知道怎么描述标题,先看截图吧,大致的效果就是一个框输入一位密码。

最开始实现的思路是一个小方框就是一个type为password的input,每输入一位自动跳到下一位,删除一位就自动跳到前一位,android上是OK的,很平滑也没有bug,但是ios上会出现键盘频繁调起和关闭,非常影响用户体验。原因估计是每个input会不断的focus和blur,每次focus会调起键盘,blur又会关闭键盘,so....此方案肯定不行了。

PM非要实现这种效果,木有办法~拗不过,一句用户体验不好会让你没话说,谁要咱是前端呢~拗不过就找解决方案吧。

既然多个是频繁focus和blur导致的问题,又必须是密码框,那何不就用一个input框来输入呢,小方框就用别的方式模拟,开干。这是最后的效果:http://jsbin.com/neqesiqogu/edit?html,css,js,output

下面是实现的样式:

css 代码

.pwd-box{ 
width:310px; 
padding-left: 1px; 
position: relative; 
border: 1px solid #9f9fa0; 
border-radius: 3px; 
} 
.pwd-box input[type="tel"]{ 
width: 99%; 
height: 45px; 
color: transparent; 
position: absolute; 
top: 0; 
left: 0; 
border: none; 
font-size: 18px; 
opacity: 0; 
z-index: 1; 
letter-spacing: 35px; 
} 
.fake-box input{ 
width: 44px; 
height: 48px; 
border: none; 
border-right: 1px solid #e5e5e5; 
text-align: center; 
font-size: 30px; 
} 
.fake-box input:nth-last-child(1){ 
border:none; 
} 
.pwd-box .pwd-input:focus{//密码框聚焦的时候需要改变其位置,否则IOS上会有闪动的光标~ 
left:-1000px; 
top: -100px; 
} 

js 代码

var $input = $(".fake-box input"); 
 $("#pwd-input").on("input", function() { 
 var pwd = $(this).val().trim(); 
 for (var i = 0, len = pwd.length; i < len; i++) { 
 $input.eq("" + i + "").val(pwd[i]); 
 } 
 $input.each(function() { 
 var index = $(this).index(); 
 if (index >= len) { 
 $(this).val(""); 
 } 
 }); 
 if (len == 6) { 
 self.sendPackage(pwd);//发送密码 
 } 
 }); 

大致的思路就是动态监听真实密码框的输入修改小方框内密码框的内容。

其实效果实现不难,关键是思路还有解决该死的兼容,完成该效果的时候IOS会有闪动的光标,android没有,然后找一系列方法去隐藏光标,比如focus时候设置text-indent,color设置transparent等等,但都无济于事,后来发现淘宝有个办法是focus时候把密码框丢到一边去,因为外层有overflow hidden,完美解决了问题~

下载本文
显示全文
专题