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 相关文章推荐
用于table内容排序
Jul 21 Javascript
抽出www.templatemonster.com的鼠标悬停加载大图模板的代码
Jul 11 Javascript
javascript+xml技术实现分页浏览
Jul 27 Javascript
JavaScript高级程序设计阅读笔记(六) ECMAScript中的运算符(二)
Feb 27 Javascript
javascript图片切换综合实例(循环切换、顺序切换)
Jan 13 Javascript
javascript中获取元素标签中间的内容的实现方法
Oct 08 Javascript
jQuery EasyUI Panel面板组件使用详解
Feb 28 Javascript
详解在Angularjs中ui-sref和$state.go如何传递参数
Apr 24 Javascript
JavaScript设计模式之代理模式详解
Jun 09 Javascript
五步轻松实现JavaScript HTML时钟效果
Mar 25 Javascript
JavaScript函数的特性与应用实践深入详解
Dec 30 Javascript
微信小程序开发之点击按钮退出小程序的实现方法
Apr 26 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
哪吒敖丙传:新人物二哥敖乙出场 小敖丙奶气十足
2020/03/08 国漫
探讨:parse url解析URL,返回其组成部分
2013/06/14 PHP
javascript onmouseout 解决办法
2010/07/17 Javascript
浅谈JavaScript之事件绑定
2013/07/08 Javascript
NodeJS与Mysql的交互示例代码
2013/08/18 NodeJs
JS获得选取checkbox整行数据的方法
2015/01/28 Javascript
深入解析JavaScript框架Backbone.js中的事件机制
2016/02/14 Javascript
url中的特殊符号有什么含义(推荐)
2016/06/17 Javascript
React 子组件向父组件传值的方法
2017/07/24 Javascript
JS中数组与对象的遍历方法实例小结
2018/08/14 Javascript
Layui给数据表格动态添加一行并跳转到添加行所在页的方法
2018/08/20 Javascript
对angularjs框架下controller间的传值方法详解
2018/10/08 Javascript
JS实现的点击按钮图片上下滚动效果示例
2019/01/28 Javascript
ES6 新增的创建数组的方法(小结)
2019/08/01 Javascript
python处理cookie详解
2014/02/07 Python
python base64 decode incorrect padding错误解决方法
2015/01/08 Python
Python中内建函数的简单用法说明
2016/05/05 Python
Python中 Lambda表达式全面解析
2016/11/28 Python
Python微信公众号开发平台
2018/01/25 Python
django缓存配置的几种方法详解
2018/07/16 Python
Python判断字符串是否为字母或者数字(浮点数)的多种方法
2018/08/03 Python
Python调用C++,通过Pybind11制作Python接口
2018/10/16 Python
pycham查看程序执行的时间方法
2018/11/29 Python
python 从文件夹抽取图片另存的方法
2018/12/04 Python
ubuntu 18.04搭建python环境(pycharm+anaconda)
2019/06/14 Python
python将类似json的数据存储到MySQL中的实例
2019/07/12 Python
numpy:np.newaxis 实现将行向量转换成列向量
2019/11/30 Python
python 工具 字符串转numpy浮点数组的实现
2020/03/14 Python
python怎么调用自己的函数
2020/07/01 Python
购房意向书
2014/04/01 职场文书
工厂门卫的岗位职责
2014/07/27 职场文书
试用期转正员工自我评价
2014/09/18 职场文书
丽江古城导游词
2015/02/03 职场文书
机关干部正风肃纪心得体会
2016/01/15 职场文书
redis配置文件中常用配置详解
2021/04/14 Redis
Java中PriorityQueue实现最小堆和最大堆的用法
2021/06/27 Java/Android