js仿支付宝多方框输入支付密码效果

作者:你脑子有bug 时间:2024-04-26 17:12:49 

上次看到别人说写一个类似支付宝支付密码的输入框效果,今天就想自己写了试试看,大体功能是实现了。

已实现部分:
1. 焦点会随着输入数值往后推移
2. 如果输入的非0-9,则会出现提示
3. 按Backspance回车可以对应格子焦点往前推移
4. 按回车或者点击按钮可以触发按钮点击事件,获得输入值

未完善部分:
1. 在控制输入类型的时候,只有0-9、非0-9以及回车、回删几个键盘事件的区分,不够完善
2. 输入框用的input标签,password类型,会将输入值变成圆点,但是圆点太小不够美观,不知道如何改变圆点大小,考虑是否要画个圆点遮盖

ps:代码不够精简,很多感觉还可以改进精简。

效果图:

js仿支付宝多方框输入支付密码效果

代码段:

**index.html 主要代码**


<div class="content">
<div class="title">支付宝支付密码:</div>
<div class="box"></div>
<div class="forget">忘记密码?</div>
<div class="point">请输入6位数字密码</div>
<button class="getPasswordBtn">一键获取密码</button>
<div class="errorPoint">请输入数字!</div>

</div>

**reset.css代码**


*{
padding: 0;
margin: 0;
}
.content{
width: 400px;
height: 50px;
margin: 0 auto;
margin-top: 100px;

}
.title{
font-family: '微软雅黑';
font-size: 16px;
}
.box{
width: 190px;
height: 30px;
border:1px solid #ccc;
margin-top: 10px;
line-height: 30px;
}
.content .box,.forget{
display: inline-block;
}
.content .forget{
width: 100px;
color:lightskyblue;
vertical-align: super;
font-size: 14px;
}
.box input.paw{
width: 30px;
height: 20px;
line-height: 20px;
margin-left: -9px;
border:none;
border-right: 1px dashed #ccc;
text-align: center;
}
.box input.paw:nth-child(1){
margin-left: 0;
}
.content .box .pawDiv:nth-child(6) input.paw{
border: none;
}
.content .box input.paw:focus{outline:0;}
.content .box .pawDiv{
display: inline-block;
line-height: 30px;
width: 31px;
height: 31px;
margin-top: -2px;
float: left;
}
.point{
font-size: 14px;
color: #ccc;
margin: 5px 0;
}
.errorPoint{
color: red;
display: none;
}
.getPasswordBtn{
width: 100px;
height: 30px;
background-color: cornflowerblue;
font-size: 14px;
font-family: '微软雅黑';
color: white;
border: none;
}

**main.js代码**


/*动态生成*/
var box=document.getElementsByClassName("box")[0];
function createDIV(num){
for(var i=0;i<num;i++){
 var pawDiv=document.createElement("div");
 pawDiv.className="pawDiv";
 box.appendChild(pawDiv);
 var paw=document.createElement("input");
 paw.type="password";
 paw.className="paw";
 paw.maxLength="1";
 paw.readOnly="readonly";
 pawDiv.appendChild(paw);
}
}
createDIV(6);

var pawDiv=document.getElementsByClassName("pawDiv");
var paw=document.getElementsByClassName("paw");
var pawDivCount=pawDiv.length;
/*设置第一个输入框默认选中*/
pawDiv[0].setAttribute("style","border: 2px solid deepskyblue;");
paw[0].readOnly=false;
paw[0].focus();

var errorPoint=document.getElementsByClassName("errorPoint")[0];
/*绑定pawDiv点击事件*/

function func(){
for(var i=0;i<pawDivCount;i++){
 pawDiv[i].addEventListener("click",function(){
  pawDivClick(this);
 });
 paw[i].onkeyup=function(event){
  console.log(event.keyCode);
  if(event.keyCode>=48&&event.keyCode<=57){
   /*输入0-9*/
   changeDiv();
   errorPoint.style.display="none";

}else if(event.keyCode=="8") {
   /*退格回删事件*/
   firstDiv();

}else if(event.keyCode=="13"){
   /*回车事件*/
   getPassword();

}else{
   /*输入非0-9*/
   errorPoint.style.display="block";
   this.value="";
  }

};
}

}
func();

/*定义pawDiv点击事件*/
var pawDivClick=function(e){
for(var i=0;i<pawDivCount;i++){
 pawDiv[i].setAttribute("style","border:none");
}
e.setAttribute("style","border: 2px solid deepskyblue;");
};

/*定义自动选中下一个输入框事件*/
var changeDiv=function(){
for(var i=0;i<pawDivCount;i++){
 if(paw[i].value.length=="1"){
  /*处理当前输入框*/
  paw[i].blur();

/*处理上一个输入框*/
  paw[i+1].focus();
  paw[i+1].readOnly=false;
  pawDivClick(pawDiv[i+1]);
 }
}
};

/*回删时选中上一个输入框事件*/
var firstDiv=function(){
for(var i=0;i<pawDivCount;i++){
 console.log(i);
 if(paw[i].value.length=="0"){
  /*处理当前输入框*/
  console.log(i);
  paw[i].blur();

/*处理上一个输入框*/
  paw[i-1].focus();
  paw[i-1].readOnly=false;
  paw[i-1].value="";
  pawDivClick(pawDiv[i-1]);
  break;
 }
}
};

/*获取输入密码*/
var getPassword=function(){
var n="";
for(var i=0;i<pawDivCount;i++){
 n+=paw[i].value;
}
alert(n);
};
var getPasswordBtn=document.getElementsByClassName("getPasswordBtn")[0];

getPasswordBtn.addEventListener("click",getPassword);

/*键盘事件*/
document.onkeyup=function(event){
if(event.keyCode=="13") {
 /*回车事件*/
 getPassword();
}
};

来源:http://blog.csdn.net/github_35830425/article/details/52183717

标签:js,支付宝,密码
0
投稿

猜你喜欢

  • 学习Python爬虫前必掌握知识点

    2022-10-09 04:32:57
  • ASP压缩ACCESS数据库实例

    2009-01-19 11:47:00
  • Python 找出出现次数超过数组长度一半的元素实例

    2023-06-07 05:50:33
  • Python中免验证跳转到内容页的实例代码

    2021-03-27 11:19:55
  • WEB移动应用框架构想

    2010-09-28 16:26:00
  • CSS pointer-events下层元素被点击

    2010-04-11 22:31:00
  • INSERT INTO SELECT语句与SELECT INTO FROM语句的一些区别

    2024-01-19 11:21:13
  • python使用threading获取线程函数返回值的实现方法

    2023-10-28 09:34:21
  • 浅析python的优势和不足之处

    2021-06-11 02:33:20
  • python使用分治法实现求解最大值的方法

    2021-07-14 12:06:09
  • redis服务器环境下mysql实现lnmp架构缓存

    2024-01-20 01:44:29
  • python+pandas分析nginx日志的实例

    2021-03-13 12:51:22
  • 通过Turtle库在Python中绘制一个鼠年福鼠

    2021-03-01 03:48:12
  • 25个出色的使用叶子的logo设计

    2009-12-29 12:53:00
  • Js中var,let,const的区别你知道吗

    2024-05-09 15:07:50
  • Vue中$router与 $route的区别详解

    2024-04-30 10:38:42
  • vue中beforeRouteLeave实现页面回退不刷新的示例代码

    2024-05-09 15:11:16
  • 解决Navicat无法连接 VMware中Centos系统中的 MySQL服务器的问题

    2024-01-16 03:12:17
  • Python调用百度api实现语音识别详解

    2023-03-10 05:10:17
  • pytest官方文档解读之安装和使用插件的方法

    2022-11-25 23:05:38
  • asp之家 网络编程 m.aspxhome.com