JavaScript实现淘宝京东6位数字支付密码效果


Posted in Javascript onAugust 18, 2018

京东淘宝的密码输入框功能点

  • 只能输入数字
  • 只能输入6位字符
  • 每次输入一个字符,对应位置的小黑点显示
  • 每次删除一个字符,对应位置的小黑点消失

实现思路

1、写好6位密码输入框的静态样式和html结构
2、将密码输入框input定位到父容器,覆盖之前写好的6位密码输入框区域,并设置为透明
3、虽然设置了密码输入框为透明,但当密码输入框获得焦点的时候,输入框的光标会显示出来,并不是透明状态。为了解决这个问题,暂时想到了两种方法,第一种,利用css将光标也设置为透明,不过这种方法有一定的兼容问题;第二种,当输入框获得焦点的时候,将输入框定位到屏幕外面,用户看不到输入框,自然也就看不到光标在那里一闪一闪了。
4、对于用户只能输入数字的功能,这里用正则表达式就搞定了,如果用户输入了非数字字符,将input输入框的值清空
5、对于用户输入超过6位字符的情况,利用字符串的截取方法截取input.value的前6位字符
6、循环遍历圆点,将index小于input.value.length的圆点显示出来
7、用户输入超过6个的数字的时候,你再去删除,你会发现要删除很多字符,那些小圆点才会相应的消失,所以这里,将截取的6位字符赋值给input输入框的值,让input.value长度永远小于等于6

HTML结构

父容器 input-ps 用于input输入框的定位
一位密码对应一个input-ps-item和dot

<div class="input-ps">
  <div class="input-ps-item">
    <span class="dot"></span> //小圆点
  </div>
  <div class="input-ps-item">
    <span class="dot"></span>
  </div>
  <div class="input-ps-item">
    <span class="dot"></span>
  </div>
  <div class="input-ps-item">
    <span class="dot"></span>
  </div>
  <div class="input-ps-item">
    <span class="dot"></span>
  </div>
  <div class="input-ps-item last">
    <span class="dot"></span>
  </div>
  <input id="input-mima" class="input-mima" type="text"/>
</div>

CSS样式

css样式自己定义就行,想要什么样式自己写~~~注意几个关键点

dot初始状态为隐藏状态
input输入框为绝对定位,覆盖在6个密码块上,设置为透明

.input-ps{
  position: relative;
  display: flex;
  align-items: center;
  width: 8.28125rem;
  height: 1.375rem;
  margin: 0 auto;
  border: 1px solid #d9d9d9;
  border-radius: 0.1875rem;
  background-color: #fff;
}
.input-ps-item{
  display: flex;
  justify-content: space-around;
  align-items: center;
  flex: 1;
  height: 0.78125rem;
  border-right: 1px solid #d9d9d9;
}
.last{
  border: none;
}
.dot{
  display: none;
  width: 0.234375rem;
  height: 0.234375rem;
  border-radius: 0.234375rem;
  background-color: #363e49;
}
.input-mima{
  position: absolute;
  left: 0;
  top: 0;
  height: 1.375rem !important;
  color: transparent;
  opacity: 0;
}

JS脚本

/**
     * 获取dom节点
     */
    var dom = {
      $input_mima : document.getElementById("input-mima")      //隐藏起来的密码输入框
    }

    /**
     * 隐藏的密码输入框获得焦点事件
     * 输入框获得焦点后,将输入框的定位定到屏幕看不见的位置
     */
    dom.$input_mima.addEventListener("focus",function(){
      this.style.top = "-10000px";
    })
    /**
     * 隐藏的密码输入框失去焦点事件
     * 输入框失去焦点后,将输入框的定位定原来的位置
     */
    dom.$input_mima.addEventListener("blur",function(){
      this.style.top = "0";
    })
    /**
     * 隐藏的输入框输入值的事件
     * 判断输入的值中是否都是数字
     * 如果都是数字,截取最前面6位数字
     * 如果不全是数字,将输入框中的值设置空
     * 遍历dot点,将和输入框内值的长度一致的dot个数显示出来
     *
     */
    dom.$input_mima.addEventListener("input",function(){
      var mima ;
      //正则判断输入的值是否全是数字
      if(/^[0-9]*$/.test(this.value)){
        mima = this.value.substring(0,6); //截取输入框中值的前6个字符
        this.value = mima;         //将输入框中的值设置位截取到的值
      }else{
        mima = "";
        this.value = mima;         //将输入框的值设置位空
      }
      //遍历圆点dot,将index小于密码长度的圆点显示出来。这里我是用的mui框架的遍历方法,如果你用的不是mui框架,可以换成其他的方式遍历,下面有一个原生JS的循环方法
      mui(".dot").each(function(index){
        if(index < mima.length){
          this.style.display = "block";
        }else{
          this.style.display = "none";
        }
      })
      //原生的循环方法 - ,-
      // var dot_list = document.getElementsByClassName("dot");
      // for(var index =0;index<dot_list.length;index++){
      //   if(index < mima.length){
      //     dot_list[index].style.display = "block";
      //   }else{
      //     dot_list[index].style.display = "none";
      //   }
      // }

      //输入的密码达到6位之后判断密码是否正确,这边模拟了一下正确密码是123456的情况
      //密码正确之后进行你想要的操作
      //如果不希望输入的密码字符达到6位后自动进行业务逻辑的代码,这部分可以不写,将你的业务逻辑绑定到别的节点
      if(mima.length >=6){
        //TODO 这里写业务逻辑代码
        //模拟密码
        if(mima == "123456"){
          //TODO 这里写业务逻辑代码
        }

      }
})

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

Javascript 相关文章推荐
Javascript 写的简单进度条控件
Jan 22 Javascript
ASP中Sub和Function的区别说明
Aug 30 Javascript
为EasyUI的Tab标签添加右键菜单的方法
Jul 14 Javascript
Bootstrap Table使用整理(五)之分页组合查询
Jun 09 Javascript
vuex 使用文档小结篇
Jan 11 Javascript
微信小程序入口场景的问题集合与相关解决方法
Jun 26 Javascript
JsonProperty 的使用方法详解
Oct 11 Javascript
WEEX环境搭建与入门详解
Oct 16 Javascript
Vue 实现把表单form数据 转化成json格式的数据
Oct 29 Javascript
使用vue实现HTML页面生成图片的方法
Mar 12 Javascript
Ajax实现页面无刷新留言效果
Mar 24 Javascript
四十九个javascript小知识实用技巧
Nov 20 Javascript
详解Angular6 热加载配置方案
Aug 18 #Javascript
Vue+element-ui 实现表格的分页功能示例
Aug 18 #Javascript
vue下history模式刷新后404错误解决方法
Aug 18 #Javascript
详解javascript appendChild()的完整功能
Aug 18 #Javascript
vue中的自定义分页插件组件的示例
Aug 18 #Javascript
vue 自定义提示框(Toast)组件的实现代码
Aug 17 #Javascript
微信小程序实现即时通信聊天功能的实例代码
Aug 17 #Javascript
You might like
php access 数据连接与读取保存编辑数据的实现代码
2010/05/12 PHP
PHP 实现从数据库导出到.csv文件方法
2017/07/06 PHP
读jQuery之七 判断点击了鼠标哪个键的代码
2011/06/21 Javascript
javascript检测浏览器flash版本的实现代码
2011/12/06 Javascript
多种方式实现JS调用后台方法进行数据交互
2013/08/20 Javascript
javascript学习笔记(五)原型和原型链详解
2014/10/08 Javascript
Javascript核心读书有感之词法结构
2015/02/01 Javascript
jQuery实现平滑滚动到指定锚点的方法
2015/03/20 Javascript
全面解析Bootstrap表单使用方法(表单样式)
2015/11/24 Javascript
mvc 、bootstrap 结合分布式图简单实现分页
2016/10/10 Javascript
AngularJS控制器之间的通信方式详解
2016/11/03 Javascript
浅谈Vue.js中ref ($refs)用法举例总结
2017/12/19 Javascript
12条写出高质量JS代码的方法
2018/01/07 Javascript
浅谈webpack打包生成的bundle.js文件过大的问题
2018/02/22 Javascript
使用webpack打包后的vue项目如何正确运行(express)
2018/10/26 Javascript
node.js使用express框架进行文件上传详解
2019/03/03 Javascript
[07:55]2014DOTA2 TI正赛第三日 VG上演推进荣耀DKEG告别
2014/07/21 DOTA
在Python程序中操作文件之flush()方法的使用教程
2015/05/24 Python
Python将QQ聊天记录生成词云的示例代码
2021/02/10 Python
css3和jquery实现自定义checkbox和radiobox组件
2014/04/22 HTML / CSS
HTML5画渐变背景图片并自动下载实现步骤
2013/11/18 HTML / CSS
英国票务网站:Ticketmaster英国
2018/08/27 全球购物
美国领先的在线旅游网站:Orbitz
2018/11/05 全球购物
Shopee新加坡:东南亚与台湾电商平台
2019/01/25 全球购物
MAC Cosmetics巴西官方网站:M·A·C彩妆
2019/04/18 全球购物
巴黎欧莱雅法国官网:L’Oreal Paris
2019/04/30 全球购物
卡拉威高尔夫官方网站:Callaway Golf
2020/09/16 全球购物
升职自荐信范文
2013/10/05 职场文书
教师师德教育的自我评价
2013/10/31 职场文书
2014年高中班主任工作总结
2014/11/08 职场文书
西柏坡观后感
2015/06/08 职场文书
pdf论文中python画的图Type 3 fonts字体不兼容的解决方案
2021/04/24 Python
jackson json序列化实现首字母大写,第二个字母需小写
2021/06/29 Java/Android
分析并发编程之LongAdder原理
2021/06/29 Java/Android
利用js实现简单开关灯代码
2021/11/23 Javascript
SpringBoot前端后端分离之Nginx服务器下载安装过程
2022/08/14 Servers