js/jq實現獲取手機驗證碼倒計時效果

衆所周知在前段的工做中註冊信息或獲取當前手機號信息等需求,咱們基本上都要涉及到手機號驗證碼,在網絡上搜索的案例雜亂無章,用的時候全是坑,真心不想用了,而後本身寫了一個獲取手機驗證碼的倒計時效果。有需求的夥伴們能夠看看怎麼實現的。php

yanzhengma (1)

如何獲取手機驗證碼?

小月不知道你們是利用什麼平臺去獲取驗證碼的,可是告訴你們我是在哪一個平臺獲取的。css

LeanCloud :https://leancloud.cn/html

文檔:https://leancloud.cn/docs/sms_guide-js.html前端

在這個平臺首先去要註冊一個帳號,在設置裏面設置本身的信息按照文檔去操做就能夠了這裏很少說了,大部分是後臺去操做些接口的,咱們前端有能力的能夠本身去嘗試用php去寫接口。(懶惰的我是不會寫。)ajax

通常是兩個接口:服務器

  1. 發送驗證請求(這樣你的手機會受到短信驗證哦)
  2. 返回數據驗證手機號和驗證是否一致

根據後臺攻城獅的接口去實現吧。網絡

前端頁面的工做

下面這段代碼就是上圖所示的頁面ide

<div class="pop">
    <div class="con">
        <span class="close"><img src="img/close.png"></span>
        <div class="page1">
           <p class="info">
               <span class="title">手機號:</span>
               <input type="tel" class="tel" id="mobile" onkeyup="value=value.replace(/[^\w\.\/]/ig,&#39;&#39;)" required="" placeholder="請輸入您的手機號">
           </p>
           <p class="info">
              <span class="title">驗證碼:</span>
              <input type="tel" class="code" placeholder="輸入驗證碼">
              <span class="code1">獲取驗證碼</span>
           </p>
           <div class="demand demand2" style="width: 70%; margin-top: 20px;">提交</div>
       </div>
       <div class="page2">
           <p class="p1">提交成功</p>
           <p class="p2">咱們將在索要成功後</p>
           <p class="p2">第一時間通知您!</p>
           <div class="demand demand3" style="width: 80%; margin-top: 20px; margin-bottom: 10px;">朕知道了</div>
       </div>
    </div>
</div>

 

校驗手機號是否正確

//校驗手機號
//頁面的input寫的正則下面直接調用方法就能夠的
 jQuery.extend({
     checkmobileNo: function(str) {
         var re =/^1[3|7|5|8]\d{9}$/;
         if (re.test(str)) {
             return true;
         } else {
             return false;
         }
     }
 });

 

JS/JQ部分處理髮送短信驗證請求

//發送驗證碼給手機
 $.ajax({
 type: 'GET',
 url:"大家後臺提供的接口" + mobile, //即上面的接口1
 success: function(data, status) {
 if (data.errcode==0) {
 alert("已發送");
 $(".code1").attr("disabled", "disabled");
 $(".code1").css("background-color", "#b4b2b3");

//下面就是實現倒計時的效果代碼
 var d = new Date();
 d.setSeconds(d.getSeconds() + 59);
 var m = d.getMonth() + 1;
 var time = d.getFullYear() + '-' + m + '-' + d.getDate() + ' ' + d.getHours() + ':' + d.getMinutes() + ':' + d.getSeconds();

 var id = ".code1";
 var end_time = new Date(Date.parse(time.replace(/-/g, "/"))).getTime(),
 //月份是實際月份-1
 sys_second = (end_time - new Date().getTime()) / 1000;
 var timer = setInterval(function() {
 if (sys_second > 1) {
 sys_second -= 1;
 var day = Math.floor((sys_second / 3600) / 24);
 var hour = Math.floor((sys_second / 3600) % 24);
 var minute = Math.floor((sys_second / 60) % 60);
 var second = Math.floor(sys_second % 60);
 var time_text = '';
 if (day > 0) {
 time_text += day + '天';
 }
 if (hour > 0) {
 if (hour < 10) {
 hour = '0' + hour;
 }
 time_text += hour + '小時';
 }
 if (minute > 0) {
 if (minute < 10) {
 minute = '0' + minute;
 }
 time_text += minute + '分';
 }
 if (second > 0) {
 if (second < 10) {
 second = '0' + second;
 }
 time_text += second + '秒';
 }
 $(id).text(time_text);

 } else {
 clearInterval(timer);
 $(".code1").attr("disabled", false);
 $(".code1").text('獲取驗證碼');
 $(".code1").css("background-color", "#f67a62");
 }
 },
 1000); 
 
 }else{
 alert("發送失敗,請再試一次。");
 }
 },
 error: function(data, status) {
 alert(status);
 }
 });
 
 });

 

向服務器提交信息

//驗證驗證碼和手機發送的驗證碼是否一致
 $.ajax({
 type: 'GET',
 url: "接口2",
 success: function(data, status) {
 if (data.errcode==0) {
 //向服務器提交信息
 $.ajax({
 type: 'POST',
 url: "向服務器提交大家索要填寫的信息接口",
 data: JSON.stringify({     //data這裏看大家的需求根據接口的數據去寫
 "project_id": pid,
 "phone": mobile,
 "device":d
 }),
 success: function(data, status) {
 if (data.errcode==0) {
 $('.page1').hide();
 $('.page2').show();
 }else{
 alert("提交失敗,請在嘗試一次!");
 }
 },
 error: function(data, status) {
 alert(data.errMsg);
 }
 });
 }else{
 alert("驗證碼不正確!");
 }
 },
 error: function(data, status) {
 alert(status);
 }
 });
 
 });

 

終於寫完了,你們有需求的本身嘗試一下吧。有疑問的能夠來問小月,想要案例源碼的找小月來要把,DEMO 打開後請加QQ羣在羣文件能夠自行下載哦!ui

相關文章
相關標籤/搜索