首页 > 程序开发 > web前端 > JavaScript >

JS如何制作图形验证码

2017-08-21

JS如何制作图形验证码,第一步我们来到要展示验证码的页面,当我们按下营业执照的时候让其,弹出一个弹框,弹框的上面就是验证码。

实际效果

第一步我们来到要展示验证码的页面,当我们按下营业执照的时候让其,弹出一个弹框,弹框的上面就是验证码,如图一所示:

这里写图片描述(图一)

弹框的样式如图二所示:

这里写图片描述(图二)

我们要对验证码的值进行校验,判断验证码是否输入正确,当输入不正确的时候,我们提示错误信息,提示信息如图三所示:

这里写图片描述(图三)

如果页面了验证正确,这不会提示错误信息并且调到我们的目标页面,如图四所示:

这里写图片描述(图四)

路由层描述

        /**
         供货商店铺-店铺简介
         */
         //1-在路由层进行设置,页面跳转到根目录下/buyer/vshop/info.ejs页面进行跳转,然后在回调函数中进行接口的调用
           router.get('/buyer/vshop/info', function(req, res, next) {  
         //2-调用接口获取数据      
            async.parallel({ 
                verifycode :function(fn){
                //3-调用接口获取本机的IP地址
                    var args= {
                        userIp: tools.getClientIp(req)
                    };

                    //4-调用接口verifyCodeHelper的createVcode方法获取captcha与 csnonce的数据,他们的值都是腾讯接口verifyCodeHelper返回的数据

                    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-进行根目录下buyer/vshop/describe页面的渲染,传递相关参数到EJS页面

                    res.render("buyer/vshop/describe", {   
                        title: srcBizType==1 ? result.getDetail.name : "店铺简介",
                        pageName:"vshopInfo",
                        captcha:result.verifycode.captcha,//验证码
                        isTencent: 1,
                        csnonce:result.verifycode.csnonce
                    });
                }
            });
        });

EJS层描述

    <%- include ../../header %>
     //1-获取路由传递的 csnonce
    <script>
        APP.newLogin= {
            csnonce: '<%- csnonce %>',
        };
    
    
    

  • 请输入下面的图形验证码

<%- include ./widget_vshop %>
  • 所在地

    <%- detail.address%>

  • 开店时间

    <%- detail.createTime%>

  • 发货速度

    <%- detail.score.express%>

  • 服务态度

    <%- detail.score.service%>

  • 描述相符

    <%- detail.score.describe%>

    <%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'}%>
  • 认证

    <%- detail.shopType %>

<%- include ./footer %>

<%- include ../../widget_navBtns %>

//2-获取路由传递的captcha <script type="text/javascript" src="<%= captcha %>"></script> //3-引入相关JS文件 <script> seajs.use("js_cmd/vshop/home-cmd"); </script> <%- include ../../footer %>

JS层描述

    /**
     这是一个公用文件,vshop首页&vshop全部商品共用
     */
    //1-引入页面所需的各个模块
    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实例化 
        var vm = new Vue({
            data: {},
            methods: {}
        });

    //3- 页面初始化函数

        function initPage() {
            vm.$mount(&#39;#vue_hooker&#39;);
            window.scroll(0,0);
        }
   //4- 验证码相关处理函数
        function license(){
            $(&#39;.info4 .business-license&#39;).click(function (ev) { //弹层
                $(&#39;.btn_mes_text&#39;).val("");
                $(&#39;.arrow_mask&#39;).show();
                $(&#39;.arrow&#39;).show();
                $(&#39;#nav_omit&#39;).remove();
            });
            $(&#39;#btn_sku_dialog_close&#39;).click(function(ev){//弹窗
                $(&#39;.arrow_mask&#39;).hide();
                $(&#39;.arrow&#39;).hide();
                $(&#39;.btn_mes_text&#39;).val("");
            });

            $(&#39;.btn_mes_text&#39;).focus(function(){ //输入框获得焦点
                $(&#39;.btn_mes_text&#39;).val("");
                if($(&#39;.verification-code&#39;).length!=0){
                    $(&#39;.verification-code&#39;).remove();
                }
            });
            $(&#39;.license-submit&#39;).click(function(){
                APP.verifyPicCode();
            });

        }

        //5- 验证码初始化函数() TSOCapObj是腾讯接口里面的方法

        function verify_initPage(){
            $(&#39;#J_BtnVerifyPicCodeTencent&#39;).on(&#39;click&#39;, function () {
                TSOCapObj.refresh();
            });
            //初始化,参数传入显示验证码的元素imgid
            TSOCapObj.init("J_BtnVerifyPicCodeTencent");
            //刷新拉取验证码图片
            TSOCapObj.refresh();

            APP.verifyPicCode= function(fn) {
                //获取用户输入
                var ans = $(".btn_mes_text").val();
                //验证答案,验证完成后会回调第二个参数传入的函数
                TSOCapObj.verify(ans , function(ret_json){
                    if (ret_json.errorCode!=0) {
                        $(".btn_mes_text").val("");
                        TSOCapObj.refresh();
                        //tip("图形验证码输入错误!");
                        if($(&#39;.verification-code&#39;).length==0){
                            $(&#39;.btn_mes&#39;).eq(0).append(" 

请输入正确的验证码

"); } $(&#39;.btn_mes_text&#39;).blur(function(){ $(&#39;.btn_mes_text&#39;).text(""); }); } else { window.location="/buyer/vshop/license?aid=" + APP.aid; fn(ret_json.ticket); } }); } } //6- 页面初始化函数的执行 $(function () { initPage(); license(); verify_initPage(); }); });

CCS层描述

    @import url(common.css);

    .p-section-info .info4{padding: 0}
    .p-section-info .info4 li{
        padding: 11px 14px;
        line-height: 20px;
        border-bottom: 1px solid #e6e6e6;

    }
    .p-section-info .info4 li a{
        color: #333;

        display: block;
    }
    .p-section-info .info4 li a.tel{
        background: url(/imgs/vshop/callAndMsg.png)  no-repeat;   
        background-size: 20px 60px;
         background-position: right 0;
    }
    .p-section-info .info4 li a.webim{
        background: url(/imgs/vshop/callAndMsg.png)  no-repeat;   
        background-size: 20px 60px;
        background-position: right -30px;
    }
    .p-section-info .info4 li a label{ 
        display: block;
        float: right;
    }

    .p-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 p:nth-of-type(1){
        position: relative;
    }
    .arrow-mess{
        margin-top: 52px;
    }
相关文章
最新文章
热点推荐