自写短信验证登录demo练习(前端)

代码练习,尽量用原生js

1 需求

在这里插入图片描述

  • 点击获取验证码 发送请求 携带手机号信息
    • 检查输入手机号是否有错误,有误红色字体标识
  • 点击获取验证码后倒计时
  • 登录发送请求 携带手机号、验证码

2 完整代码

利用了jquery发送ajax

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
  <style>
    .box {
      width: 500px;
      height: 500px;
      border: 1px solid #000;
      margin: 0 auto;
    }

    .verCode {
      width: 60%;
      margin: 60% auto 10%;
    }

    .verCode-input {
      width: 300px;
      height: 25px;
      border-top: 0;
      border-left: 0;
      border-right: 0;
      border-bottom: 1px solid rgba(0, 0, 0, .3);
      outline: none;
      background-color: rgba(0, 0, 0, 0);

    }

    .verCode-input-error {
      color: red;
      font: 400 13px Arial;
      position: absolute;
      top: 0;
      right: 2%;
      display: none;
    }

    .telNumber {
      padding-top: 10px;
      position: relative;
    }

    .verCode-a {
      position: relative;
      padding-top: 10px;
    }

    #getVerCode {
      position: absolute;
      right: 0;
      top: 32%;
      outline: none;
      border: 0;
      background: transparent;
      color: #175199;
    }

    .login {
      text-align: center;
      background: #0084ff;
      line-height: 35px;
      color: white;
      user-select: none;
    }

    .login:hover {
      background: #0077e6;
    }

  </style>
  <script src="jquery-1.12.4.js"></script>
</head>
<body>
<div class="box">
  <div class="verCode">
    <div class="telNumber">
      <input class="verCode-input a" placeholder="输入手机号" type="text">
      <p class="verCode-input-error">请输入正确手机号</p>
    </div>
    <div class="verCode-a">
      <input class="verCode-input b" placeholder="输入验证码" type="text">
      <button id="getVerCode">获取手机验证码</button>
    </div>
    <br>
    <div class="login">登录</div>
  </div>
</div>
</body>
<script>
  let verCodeBtn = document.getElementById("getVerCode");
  let telNumInp = document.getElementsByClassName('verCode-input')[0];
  let verCodeInpErr = document.getElementsByClassName('verCode-input-error')[0];
  let verCodeInp = document.getElementsByClassName('verCode-input a')[0];
  let loginBtn = document.getElementsByClassName('login')[0];
  let intervalFlag = true;
  let telNum = '';

  verCodeInp.onfocus = () => {
    verCodeInpErr.style.display = 'none';
  };
  verCodeBtn.onclick = () => {
    telNum = telNumInp.value;
    //正则判断telNum合法不
    let reg = /^1\d{10}$/;
    if (!reg.test(telNum)) {
      verCodeInpErr.style.display = 'inline';
      return
    }
    //按钮处开始倒计时
    let timesRun = 10;
    if (intervalFlag) {
      intervalFlag = false;
      let interval = setInterval(function (e) {
        verCodeBtn.innerHTML = timesRun + ' 秒后重试';
        if (timesRun <= 0) {
          verCodeBtn.innerHTML = '获取手机验证码'
          clearInterval(interval);
          intervalFlag = true;
        }
        timesRun--;
      }, 1000);

      // 发送请求给后台
      $.ajax({
        url: 'http://192.168.11.2/sendTelNum/',
        data: telNum,
        type: get,
        success: function (res) {
        }
      })
    }
  };

  loginBtn.onclick = () => {
    let varCode = verCodeInp.value;
    console.log(varCode);
    $.ajax({
      url: 'http:///www.123.com/sendTelNum/',
      data: {
        telNum: telNum,
        varCode: varCode
      },
      type: 'post',
      success: function (res) {
        if (res.data.success) {
          window.location.href = 'http://www.123.com/login/' + res.data.userID;
        }
      }
    })
  }
</script>
</html>

3 一些总结

css部分:

  • 子绝父相布局
  • outline:none 清除input的边框样式和hover等效果
  • user-select: 用户无法选取该选择器元素下的文本

js部分:

  • 避免定时器多次触发
  • 脱离文档流减少重绘
  • 获得焦点事件为 onfocus 失焦 onblur
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值