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


Posted in Javascript onSeptember 27, 2016

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

已实现部分:
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();
 }
};

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
12种不宜使用的Javascript语法整理
Nov 04 Javascript
Extjs4中tree的拖拽功能(可以两棵树之间拖拽) 简单实例
Dec 08 Javascript
js动态调用css属性的小规律及实例说明
Dec 28 Javascript
Javascript让DEDECMS告别手写Tag
Sep 01 Javascript
JavaScript拖拽、碰撞、重力及弹性运动实例分析
Jan 08 Javascript
详解JavaScript中的属性和特性
Dec 08 Javascript
利用vue写todolist单页应用
Dec 15 Javascript
详解Vue2+Echarts实现多种图表数据可视化Dashboard(附源码)
Mar 21 Javascript
浅谈Node.js 沙箱环境
May 15 Javascript
React+TypeScript+webpack4多入口配置详解
Aug 08 Javascript
微信小程序后台持续定位功能使用详解
Aug 23 Javascript
详解JavaScript执行模型
Nov 16 Javascript
jQuery实现右键菜单、遮罩等效果代码
Sep 27 #Javascript
jQuery实现图片轮播效果代码
Sep 27 #Javascript
JS不完全国际化&amp;本地化手册 之 理论篇
Sep 27 #Javascript
Javascript json object 与string 相互转换的简单实现
Sep 27 #Javascript
js转html实体的方法
Sep 27 #Javascript
JSON与String互转的实现方法(Javascript)
Sep 27 #Javascript
通过JS获取Request.QueryString()参数的值实现方法
Sep 27 #Javascript
You might like
PHP自毁程序(慎用)
2015/07/09 PHP
php curl优化下载微信头像的方法总结
2018/09/07 PHP
PHP实现的支付宝支付功能示例
2019/03/26 PHP
在VS2008中使用jQuery智能感应的方法
2010/12/30 Javascript
《JavaScript高级程序设计》阅读笔记(二) ECMAScript中的原始类型
2012/02/27 Javascript
js+css实现的简单易用兼容好的分页
2013/12/30 Javascript
JS图片无缝、平滑滚动代码
2014/03/11 Javascript
jQuery中:animated选择器用法实例
2014/12/29 Javascript
DOM操作一些常用的属性汇总
2015/03/13 Javascript
AngularJS学习笔记之基本指令(init、repeat)
2015/06/16 Javascript
js中删除数组中的某一元素实例(无下标时)
2017/02/28 Javascript
微信小程序 判断手机号的实现代码
2017/04/19 Javascript
微信小程序下拉刷新界面的实现
2017/09/28 Javascript
vue2.0 实现导航守卫(路由守卫)
2018/05/21 Javascript
小程序实现列表点赞功能
2018/11/02 Javascript
Vue-CLI3.x 设置反向代理的方法
2018/12/06 Javascript
JS/HTML5游戏常用算法之碰撞检测 像素检测算法实例详解
2018/12/12 Javascript
python网络编程学习笔记(四):域名系统
2014/06/09 Python
Python中的面向对象编程详解(下)
2015/04/13 Python
启动targetcli时遇到错误解决办法
2017/10/26 Python
Python统计一个字符串中每个字符出现了多少次的方法【字符串转换为列表再统计】
2019/05/05 Python
pycharm设置鼠标悬停查看方法设置
2019/07/29 Python
Python实现二叉搜索树BST的方法示例
2019/07/30 Python
Python列表切片常用操作实例解析
2019/12/16 Python
详解Python 实现 ZeroMQ 的三种基本工作模式
2020/03/24 Python
澳大利亚玩具剧场:Toy Playhouse
2019/03/03 全球购物
巴西网上药店:Drogaria Araujo
2021/01/06 全球购物
C语言变量的命名规则都有哪些
2013/12/27 面试题
WEB控件及HTML服务端控件能否调用客户端方法?如果能,请解释如何调用?
2015/08/25 面试题
Java如何调用外部Exe程序
2015/07/04 面试题
音乐学个人的自荐书范文
2013/11/26 职场文书
网络工程师专家职业发展路线
2014/02/14 职场文书
股东授权委托书
2014/10/15 职场文书
返乡农民工证明
2015/06/24 职场文书
班主任远程培训研修日志
2015/11/13 职场文书
原生Javascript+HTML5一步步实现拖拽排序
2021/06/12 Javascript