公告:“业余草”微信公众号提供免费CSDN下载服务(只下Java资源),关注业余草微信公众号,添加作者微信:xttblog2,发送下载链接帮助你免费下载!
本博客日IP超过2000,PV 3000 左右,急需赞助商。
极客时间所有课程通过我的二维码购买后返现24元微信红包,请加博主新的微信号:xttblog2,之前的微信号好友位已满,备注:返现
受密码保护的文章请关注“业余草”公众号,回复关键字“0”获得密码
所有面试题(java、前端、数据库、springboot等)一网打尽,请关注文末小程序
腾讯云】1核2G5M轻量应用服务器50元首年,高性价比,助您轻松上云
本博客日IP超过2000,PV 3000 左右,急需赞助商。
极客时间所有课程通过我的二维码购买后返现24元微信红包,请加博主新的微信号:xttblog2,之前的微信号好友位已满,备注:返现
受密码保护的文章请关注“业余草”公众号,回复关键字“0”获得密码
所有面试题(java、前端、数据库、springboot等)一网打尽,请关注文末小程序
腾讯云】1核2G5M轻量应用服务器50元首年,高性价比,助您轻松上云
用过支付宝的用户都知道,在支付阶段有一个密码输入框看起来很炫。普通的 html input元素无法实现这样的功能,那么支付宝是如果实现的呢?今天就为大家来解密一下它的制作原理,然后我们再模仿着制作一个密码输入框。
效果演示
实现思路
其实就是一个真实输入框和6个假输入框的故事。
- 将真实输入框和假输入框容器都定位重叠,注意将真实输入框的优先级设置较高,不然就输入不了咯。
- 为了做成看似假输入框在输入,则将真实输入框隐藏,用opacity隐藏哦。
- 用户输入时,通过行为层js将真实输入框的值分配给每个假输入框。
- 输入的同时,控制假输入框光标的效果,我用了一张某宝的图片做成的,实际上,假输入框是没有获取到焦点的。
注意:
这里真实输入框的type类型用的是tel,而不是number。因为后者会生成小箭头呀,前者在用户点击输入框时app判断type是tel就会弹出数字输入键盘更好。
附上完整代码
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>仿支付宝数字密码输入框</title>
<style>
.ipt-box-nick {
width:300px;
height: 40px !important;
line-height: 40px !important;
position: relative !important; }
.ipt-box-nick .ipt-real-nick {
position: absolute !important;
top: 0 !important;
left: 0 !important;
width: 100%;
height: 40px !important;
line-height: 40px !important;
opacity: 0 !important;
z-index: 3 !important; }
.ipt-box-nick .ipts-box-nick {
position: absolute !important;
top: 0 !important;
left: 0 !important;
z-index: 1 !important;
width: 100%;
height: 40px !important;
line-height: 40px !important;
overflow: hidden; }
.ipt-box-nick .ipts-box-nick .ipt-fake-box {
height: 40px !important;
line-height: 40px !important;
display: flex !important;
justify-content: space-between !important; }
.ipt-box-nick .ipts-box-nick .ipt-fake-box input {
width: 40px !important;
height: 38px !important;
border: 1px solid #D7D7D7 !important;
color: #810213 !important;
font-weight: bold !important;
font-size: 18px !important;
text-align: center !important;
padding: 0 !important;
border-radius:2px;}
.ipt-box-nick .ipt-active-nick {
width: 40px !important;
height: 40px !important;
line-height: 40px !important;
text-align: center;
position: absolute !important;
top: 0;
left: 0;
z-index: 2; }
.ipt-box-nick .ipt-active-nick img {
vertical-align: middle; }
</style>
</head>
<body>
<div>
<div class="lh40-nick h40-nick fwb-nick">请在下方输入6位数字</div>
<div class="ipt-box-nick mb15-nick">
<input type="tel" maxlength="6" class="ipt-real-nick"/>
<div class="ipts-box-nick">
<div class="ipt-fake-box">
<input type="password" >
<input type="password" >
<input type="password" >
<input type="password" >
<input type="password" >
<input type="password" >
</div>
</div>
<div class="ipt-active-nick"><img src="https://t.alipayobjects.com/images/rmsweb/T1nYJhXalXXXXXXXXX.gif"></div>
</div>
</div>
<script src="//cdn.bootcss.com/jquery/3.1.1/jquery.min.js"></script>
<script>
$(".ipt-real-nick").on("input", function() {
//console.log($(this).val());
var $input = $(".ipt-fake-box input");
if(!$(this).val()){//无值光标顶置
$('.ipt-active-nick').css('left',$input.eq(0).offset().left-parseInt($('.ipt-box-nick').parent().css('padding-left'))+'px');
}
if(/^[0-9]*$/g.test($(this).val())){//有值只能是数字
//console.log($(this).val());
var pwd = $(this).val().trim();
for (var i = 0, len = pwd.length; i < len; i++) {
$input.eq(i).val(pwd[i]);
if($input.eq(i).next().length){//模拟光标,先将图片容器定位,控制left值而已
$('.ipt-active-nick').css('left',$input.eq(i+1).offset().left-parseInt($('.ipt-box-nick').parent().css('padding-left'))+'px');
}
}
$input.each(function() {//将有值的当前input后的所有input清空
var index = $(this).index();
if (index >= len) {
$(this).val("");
}
});
if (len == 6) {
//执行其他操作
console.log('输入完整,执行操作');
}
}else{//清除val中的非数字,返回纯number的value
var arr=$(this).val().match(/\d/g);
$(this).val($(this).val().slice(0,$(this).val().lastIndexOf(arr[arr.length-1])+1));
//console.log($(this).val());
}
});
</script>
</body>
</html>

最后,欢迎关注我的个人微信公众号:业余草(yyucao)!可加作者微信号:xttblog2。备注:“1”,添加博主微信拉你进微信群。备注错误不会同意好友申请。再次感谢您的关注!后续有精彩内容会第一时间发给您!原创文章投稿请发送至532009913@qq.com邮箱。商务合作也可添加作者微信进行联系!
本文原文出处:业余草: » 解密支付宝6位数密码输入框的制作