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 相关文章推荐
双击滚屏-常用推荐
Nov 29 Javascript
JS event使用方法详解
Apr 28 Javascript
Javascript绝句欣赏 一些经典的js代码
Feb 22 Javascript
框架页面高度自动刷新的Javascript脚本
Nov 01 Javascript
点击按钮自动加关注的代码(sina微博/QQ空间/人人网/腾讯微博)
Jan 02 Javascript
JavaScript和CSS交互的方法汇总
Dec 02 Javascript
基于jquery实现动态竖向柱状条特效
Feb 12 Javascript
简单实现bootstrap选项卡效果
Feb 08 Javascript
原生js实现移动端触摸轮播的示例代码
Dec 22 Javascript
利用jqprint插件打印页面内容的实现方法
Jan 09 Javascript
基于vue+axios+lrz.js微信端图片压缩上传方法
Jun 25 Javascript
微信小程序实现手势滑动卡片效果
Aug 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
如何实现给定日期的若干天以后的日期
2006/10/09 PHP
PHP批量生成静态HTML的简单原理和方法
2014/04/20 PHP
Laravel 5框架学习之数据库迁移(Migrations)
2015/04/08 PHP
PHP使用GD库输出汉字的方法【测试可用】
2016/11/10 PHP
网页的标准,IMG不支持onload标签怎么办
2006/06/29 Javascript
jquery插件 autoComboBox 下拉框
2010/12/22 Javascript
用jQuery模拟页面加载进度条的实现代码
2011/12/19 Javascript
js 文本滚动效果的实例代码
2013/08/17 Javascript
node.js使用cluster实现多进程
2016/03/17 Javascript
html中鼠标滚轮事件onmousewheel的处理方法
2016/11/11 Javascript
微信小程序链接传参并跳转新页面
2016/11/29 Javascript
AngularJS入门教程之Helloworld示例
2016/12/25 Javascript
解决eclipse中没有js代码提示的问题
2018/10/10 Javascript
JS+CSS3实现的简易钟表效果示例
2019/04/13 Javascript
你准备好迎接vue3.0了吗
2020/04/28 Javascript
浅谈JavaScript节流和防抖函数
2020/08/25 Javascript
浅谈JSON5解决了JSON的两大痛点
2020/12/14 Javascript
Centos5.x下升级python到python2.7版本教程
2015/02/14 Python
PyQt5打开文件对话框QFileDialog实例代码
2018/02/07 Python
浅谈Python中的zip()与*zip()函数详解
2018/02/24 Python
python之cv2与图像的载入、显示和保存实例
2018/12/05 Python
Python操作mongodb数据库的方法详解
2018/12/08 Python
解决keras使用cov1D函数的输入问题
2020/06/29 Python
linux centos 7.x 安装 python3.x 替换 python2.x的过程解析
2020/12/14 Python
html5 利用重力感应实现摇一摇换颜色可用来做抽奖等等
2014/05/07 HTML / CSS
分布式数据库需要考虑哪些问题
2013/12/08 面试题
运动会闭幕式解说词
2014/02/21 职场文书
财务内勤岗位职责
2014/04/17 职场文书
二年级小学生评语
2014/04/21 职场文书
幼儿园六一儿童节活动方案
2014/08/26 职场文书
停车场管理协议书范本
2014/10/08 职场文书
公司股份转让协议书范本
2015/01/28 职场文书
2016元旦晚会主持词
2015/07/01 职场文书
Nginx配置SSL证书出错解决方案
2021/03/31 Servers
Django中的JWT身份验证的实现
2021/05/07 Python
Redis Cluster 字段模糊匹配及删除
2021/05/27 Redis