国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > JavaScript > 正文

JS制作圖形驗(yàn)證碼實(shí)現(xiàn)代碼

2019-11-20 09:01:11
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

第一步我們來(lái)到要展示驗(yàn)證碼的頁(yè)面,當(dāng)我們按下?tīng)I(yíng)業(yè)執(zhí)照的時(shí)候讓其,彈出一個(gè)彈框,彈框的上面就是驗(yàn)證碼,如圖一所示:

這里寫(xiě)圖片描述

(圖一)

彈框的樣式如圖二所示:

這里寫(xiě)圖片描述

(圖二)

我們要對(duì)驗(yàn)證碼的值進(jìn)行校驗(yàn),判斷驗(yàn)證碼是否輸入正確,當(dāng)輸入不正確的時(shí)候,我們提示錯(cuò)誤信息,提示信息如圖三所示:

這里寫(xiě)圖片描述

(圖三)

如果頁(yè)面了驗(yàn)證正確,這不會(huì)提示錯(cuò)誤信息并且調(diào)到我們的目標(biāo)頁(yè)面,如圖四所示:

這里寫(xiě)圖片描述

(圖四)

路由層描述

    /**     供貨商店鋪-店鋪簡(jiǎn)介     */     //1-在路由層進(jìn)行設(shè)置,頁(yè)面跳轉(zhuǎn)到根目錄下/buyer/vshop/info.ejs頁(yè)面進(jìn)行跳轉(zhuǎn),然后在回調(diào)函數(shù)中進(jìn)行接口的調(diào)用      router.get('/buyer/vshop/info', function(req, res, next) {      //2-調(diào)用接口獲取數(shù)據(jù)         async.parallel({         verifycode :function(fn){        //3-調(diào)用接口獲取本機(jī)的IP地址          var args= {            userIp: tools.getClientIp(req)          };          //4-調(diào)用接口verifyCodeHelper的createVcode方法獲取captcha與 csnonce的數(shù)據(jù),他們的值都是騰訊接口verifyCodeHelper返回的數(shù)據(jù)          verifyCodeHelper.createVcode(args, function(err, result){            if (err) {              console.log(err);            }            else{              fn(null, {                captcha: result.data.queryUrl,                csnonce: result.csnonce || 0              })            }          });        }      },function(err, result){        if (err) {          res.end(err);        }else{          result.getDetail= res.shopInfo;          var fxzStatus = res.fxzStatus || {};        //5-進(jìn)行根目錄下buyer/vshop/describe頁(yè)面的渲染,傳遞相關(guān)參數(shù)到EJS頁(yè)面          res.render("buyer/vshop/describe", {              title: srcBizType==1 ? result.getDetail.name : "店鋪簡(jiǎn)介",            pageName:"vshopInfo",            captcha:result.verifycode.captcha,//驗(yàn)證碼            isTencent: 1,            csnonce:result.verifycode.csnonce          });        }      });    });

 EJS層描述

  <%- include ../../header %>   //1-獲取路由傳遞的 csnonce  <script>    APP.newLogin= {      csnonce: '<%- csnonce %>',    };  <link href="/css/vshop/describe.css?v=<%= config.version %>" rel="stylesheet" />  <style id="dynamic"></style>  <div class="arrow_mask"></div>  <div class="arrow">    <div>      <img src="/imgs/vshop/verification-code-back.png" class="verification-code-back" />    </div>    <ul class="arrow-mess"> <span class="sku-close" id="btn_sku_dialog_close"> </span>      <li>請(qǐng)輸入下面的圖形驗(yàn)證碼</li>      <li>          <img id="J_BtnVerifyPicCodeTencent" src="" class="captcha" style="height:30px;margin:0 15px;" />      </li>      <li>        <div class="btn_mes">          <input class="btn_mes_text" type="text" maxlength="6">        </div>      </li>    </ul>    <div class="btn_mes2">      <input type="button" class="license-submit" value="提交">    </div>  </div>  <div data-role="container" class="body <%= pageName %>">    <header data-role="header">      <%- include ./widget_vshop %>    </header>    <section data-role="body" class="section-body">      <div class="div-section div-section-info">        <ul class="info1">          <li class="gap"><div class="left">所在地</div><div class="right"><%- detail.address%></div></li>          <li><div class="left">開(kāi)店時(shí)間</div><div class="right"><%- detail.createTime%></div></li>        </ul>        <ul class="info2">          <li class="gap"><div class="left">發(fā)貨速度</div><div class="right"><%- detail.score.express%></div></li>          <li class="gap"><div class="left">服務(wù)態(tài)度</div><div class="right"><%- detail.score.service%></div></li>          <li><div class="left">描述相符</div><div class="right"><%- detail.score.describe%></div></li>        </ul>        <ul class="info3">          <%if(detail.shopTypeIndex==1||detail.shopTypeIndex==2||detail.shopTypeIndex==3){var bg = '/imgs/vshop/tip.png',color='#39dda5' }else{var bg = '/imgs/vshop/tip3.png',color='#59aaff'}%>          <li><div class="left anotherC">認(rèn)證</div><div class="right textR"><span style="background: url(<%-bg%>) left 1px no-repeat;background-size: 14px 12px;"><i style="background: <%-color%>"><%- detail.shopType %></i></span></div></li>        </ul>        <ul class="info4">          <li><a href="tel:<%- detail.phone%>" class="tel">服務(wù)電話(huà)</a></li>          <li><a data-aid="<%- aid%>" class="webim">在線(xiàn)客服</a></li>          <li class="business-license">            <!--<a href="/buyer/vshop/license?aid=<%- aid%>">-->            <a href="#">              <span >營(yíng)業(yè)執(zhí)照</span>              <label>查看<span></span></label>            </a>          </li>        </ul>      </div>      <%- include ./footer %>      <div id="vue_hooker">        <child-nav></child-nav>        <%- include ../../widget_navBtns %>      </div>     </section>  </div>  //2-獲取路由傳遞的captcha  <script type="text/javascript" src="<%= captcha %>"></script>  //3-引入相關(guān)JS文件  <script>    seajs.use("js_cmd/vshop/home-cmd");  </script>  <%- include ../../footer %>

 JS層描述
  

 /**   這是一個(gè)公用文件,vshop首頁(yè)&vshop全部商品共用   */  //1-引入頁(yè)面所需的各個(gè)模塊  define(function (require, exports, module) {    var $ = require("./top-suction-cmd"),      myDialog = require("lib_cmd/myDialog-cmd"),      main = require("js_cmd/main-cmd"),      DataLoader = require("./tool-cmd"),      fxzTool = require("./fxzTool-cmd"),      Vue = require("lib_cmd/vue-cmd"),      widget_navBtns = require("js_cmd/navBtns-cmd"),      $eles = {},      eles = {};   //2-Vue實(shí)例化     var vm = new Vue({      data: {},      methods: {}    });  //3- 頁(yè)面初始化函數(shù)    function initPage() {      vm.$mount('#vue_hooker');      window.scroll(0,0);    }  //4- 驗(yàn)證碼相關(guān)處理函數(shù)    function license(){      $('.info4 .business-license').click(function (ev) { //彈層        $('.btn_mes_text').val("");        $('.arrow_mask').show();        $('.arrow').show();        $('#nav_omit').remove();      });      $('#btn_sku_dialog_close').click(function(ev){//彈窗        $('.arrow_mask').hide();        $('.arrow').hide();        $('.btn_mes_text').val("");      });      $('.btn_mes_text').focus(function(){ //輸入框獲得焦點(diǎn)        $('.btn_mes_text').val("");        if($('.verification-code').length!=0){          $('.verification-code').remove();        }      });      $('.license-submit').click(function(){        APP.verifyPicCode();      });    }    //5- 驗(yàn)證碼初始化函數(shù)() TSOCapObj是騰訊接口里面的方法    function verify_initPage(){      $('#J_BtnVerifyPicCodeTencent').on('click', function () {        TSOCapObj.refresh();      });      //初始化,參數(shù)傳入顯示驗(yàn)證碼的元素imgid      TSOCapObj.init("J_BtnVerifyPicCodeTencent");      //刷新拉取驗(yàn)證碼圖片      TSOCapObj.refresh();      APP.verifyPicCode= function(fn) {        //獲取用戶(hù)輸入        var ans = $(".btn_mes_text").val();        //驗(yàn)證答案,驗(yàn)證完成后會(huì)回調(diào)第二個(gè)參數(shù)傳入的函數(shù)        TSOCapObj.verify(ans , function(ret_json){          if (ret_json.errorCode!=0) {            $(".btn_mes_text").val("");            TSOCapObj.refresh();            //tip("圖形驗(yàn)證碼輸入錯(cuò)誤!");            if($('.verification-code').length==0){              $('.btn_mes').eq(0).append(" <div class='verification-code'>請(qǐng)輸入正確的驗(yàn)證碼</div>");            }            $('.btn_mes_text').blur(function(){              $('.btn_mes_text').text("");            });          } else {            window.location="/buyer/vshop/license?aid=" + APP.aid;            fn(ret_json.ticket);          }        });      }    }     //6- 頁(yè)面初始化函數(shù)的執(zhí)行    $(function () {      initPage();      license();      verify_initPage();    });  });

 CCS層描述

  @import url(common.css);  .div-section-info .info4{padding: 0}  .div-section-info .info4 li{    padding: 11px 14px;    line-height: 20px;    border-bottom: 1px solid #e6e6e6;  }  .div-section-info .info4 li a{    color: #333;    display: block;  }  .div-section-info .info4 li a.tel{    background: url(/imgs/vshop/callAndMsg.png) no-repeat;      background-size: 20px 60px;     background-position: right 0;  }  .div-section-info .info4 li a.webim{    background: url(/imgs/vshop/callAndMsg.png) no-repeat;      background-size: 20px 60px;    background-position: right -30px;  }  .div-section-info .info4 li a label{     display: block;    float: right;  }  .div-section-info .info4 li a label span{     display: block;    width: 12px;    height: 12px;    border-right:1px solid #666;    border-bottom:1px solid #666;    -webkit-transform:rotate(-45deg);    float: right;    margin-top: 4px;  }  .arrow_mask {    position: fixed;    top: 0;    left: 0;    bottom: 0;    right: 0;    z-index: 101;    display: none;    background: black;    opacity: 0.7;  }  .arrow{    width: 250px;    height: 226px;    background-color: #FFFFFF;    position: fixed;    top: 50%;    left: 50%;    z-index: 102;    -webkit-transform: translate(-50%, -50%);    -moz-transform: translate(-50%, -50%);    -ms-transform: translate(-50%, -50%);    -o-transform: translate(-50%, -50%);    transform: translate(-50%, -50%);    border-radius: 10px;    display: none;  }  .arrow-mess li:nth-of-type(1){    text-align: center;    margin-bottom: 8px;    font-size: 14px;    color: #333333;  }  .arrow-mess li:nth-of-type(2){    text-align: center;    margin-bottom: 10px;  }  .arrow-mess li:nth-of-type(3) input{    width: 100%;    height: 30px;    border: 1px solid #979797;    text-align: center;    border-radius: 3px;    font-family: PingFangSC-Regular;    font-size: 16px;    color: #333333;    letter-spacing: 0px;  }  .btn_mes{    margin-bottom: 15px;    width: 100%;    padding-left: 48px;    padding-right: 48px;    position: relative;  }  .btn_mes2{    width: 100%;    padding-left: 70px;    padding-right: 70px;    /* position: relative; */    position: absolute;    bottom: 0px;    margin-bottom: 10px;  }  .license-submit{    width: 100%;    height: 44px;    background: #FF534C;    border: 1px solid #FF534C;    font-size: 14px;    border-radius: 4px;    color: #FFFFFF;  }  .sku-close {    background: url(/imgs/vshop/verification-code-del.png) no-repeat right;    -webkit-background-size: 25px auto;    display: inline-block;    width: 26px;    height: 26px;    position: absolute;    right: 0px;    top: 0px;    margin-right: -13px;    margin-top: -13px;  }  .verification-code{    z-index: 102;    color: #FFAA00;    position: absolute;    font-size: 12px;    top: 4px;  }  .verification-code-back{    width: 100%;    position: absolute;    height: 46px;  }  .arrow div:nth-of-type(1){    position: relative;  }  .arrow-mess{    margin-top: 52px;  }

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持武林網(wǎng)。

發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 洮南市| 湛江市| 宜兴市| 永城市| 六枝特区| 忻城县| 武威市| 高雄市| 区。| 丘北县| 陆良县| 长丰县| 若尔盖县| 南宫市| 郧西县| 囊谦县| 乳山市| 台山市| 连州市| 招远市| 调兵山市| 柞水县| 长宁县| 商城县| 大田县| 灌云县| 武川县| 巧家县| 安塞县| 鲁山县| 外汇| 鹤庆县| 通州市| 岳池县| 万荣县| 万载县| 临沂市| 浑源县| 保亭| 酉阳| 孟津县|