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 相关文章推荐
Javascript 跨域访问解决方案
Feb 14 Javascript
js getElementsByTagName的简写方式
Jun 27 Javascript
取得窗口大小 兼容所有浏览器的js代码
Aug 09 Javascript
window.open的页面如何刷新(父页面)上层页面
Dec 28 Javascript
浏览器图片选择预览、旋转、批量上传的JS代码实现
Dec 04 Javascript
使用CSS3的scale实现网页整体缩放
Mar 18 Javascript
java必学必会之static关键字
Dec 03 Javascript
angular.js实现购物车功能
Oct 23 Javascript
打通前后端构建一个Vue+Express的开发环境
Jul 17 Javascript
详解小程序原生使用ES7 async/await语法
Aug 06 Javascript
JS实现横向轮播图(中级版)
Jan 18 Javascript
学前端,css与javascript重难点浅析
Jun 11 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 miniBB中文乱码问题解决方法
2008/11/25 PHP
php笔记之:初探PHPcms模块开发介绍
2013/04/26 PHP
php $_SERVER windows系统与linux系统下的区别说明
2014/02/14 PHP
PHP输出缓存ob系列函数详解
2014/03/11 PHP
PHP大转盘中奖概率算法实例
2014/10/21 PHP
利用switch语句进行多选一判断的实例代码
2016/11/14 PHP
PHP-FPM 的管理和配置详解
2019/02/17 PHP
浅谈javascript 面向对象编程
2009/10/28 Javascript
在ASP.NET中使用JavaScript脚本的方法
2013/11/12 Javascript
jQuery拖拽 &amp; 弹出层 介绍与示例
2013/12/27 Javascript
JS扩展方法实例分析
2015/04/15 Javascript
分享javascript实现的冒泡排序代码并优化
2016/06/05 Javascript
js判断是否为空和typeof的用法(详解)
2016/10/07 Javascript
jQuery实现文章图片弹出放大效果
2017/04/06 jQuery
javascript ES6 新增了let命令使用介绍
2017/07/07 Javascript
vue中设置、获取、删除cookie的方法
2018/09/21 Javascript
axios对请求各种异常情况处理的封装方法
2018/09/25 Javascript
vue+element 模态框表格形式的可编辑表单实现
2019/06/07 Javascript
Vue.js计算机属性computed和methods方法详解
2019/10/12 Javascript
如何利用javascript接收json信息并进行处理
2020/08/06 Javascript
Django中日期处理注意事项与自定义时间格式转换详解
2018/08/06 Python
python读取文件名并改名字的实例
2019/01/07 Python
对python:循环定义多个变量的实例详解
2019/01/20 Python
python 多进程并行编程 ProcessPoolExecutor的实现
2019/10/11 Python
浅谈python3打包与拆包在函数的应用详解
2020/05/02 Python
印尼穆斯林时尚购物网站:Hijabenka
2016/12/10 全球购物
阿里云:Aliyun.com
2017/02/15 全球购物
Blancsom美国/加拿大:服装和生活用品供应商
2018/07/27 全球购物
锐步英国官网:Reebok英国
2019/11/29 全球购物
老师对学生的寄语
2014/04/09 职场文书
文秘求职信范文
2014/04/10 职场文书
政府绩效管理实施方案
2014/05/04 职场文书
中国梦演讲稿开场白
2014/08/28 职场文书
2014年“世界无车日”活动方案
2014/09/21 职场文书
安全生产协议书
2016/03/22 职场文书
2019年个人工作总结范文
2019/03/25 职场文书