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层描述
//1-获取路由传递的 csnonce
<script>
APP.newLogin= {
csnonce: '<%- csnonce %>',
};
</script>
//2-获取路由传递的captcha
<script type="text/javascript" src="<%= captcha %>"></script>
//3-引入相关JS文件
<script>
seajs.use("js_cmd/vshop/home-cmd");
</script>
<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>请输入下面的图形验证码</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">开店时间</div><div class="right"><%- detail.createTime%></div></li>
</ul>
<ul class="info2">
<li class="gap"><div class="left">发货速度</div><div class="right"><%- detail.score.express%></div></li>
<li class="gap"><div class="left">服务态度</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">认证</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">服务电话</a></li>
<li><a data-aid="<%- aid%>" class="webim">在线客服</a></li>
<li class="business-license">
<!--<a href="/buyer/vshop/license?aid=<%- aid%>">-->
<a href="#">
<span >营业执照</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>
JS层描述
//1-引入页面所需的各个模块
define(function (require, exports, module) {
var $ = require("./top-suction-cmd"),
Vue = require("lib_cmd/vue-cmd"),
$eles = {},
eles = {};
//2-Vue实例化
var vm = new Vue({
data: {},
methods: {}
});
//3- 页面初始化函数
function initPage() {
vm.$mount('#vue_hooker');
window.scroll(0,0);
}
//4- 验证码相关处理函数
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(){ //输入框获得焦点
$('.btn_mes_text').val("");
if($('.verification-code').length!=0){
$('.verification-code').remove();
}
});
$('.license-submit').click(function(){
APP.verifyPicCode();
});
}
//5- 验证码初始化函数() TSOCapObj是腾讯接口里面的方法
function verify_initPage(){
$('#J_BtnVerifyPicCodeTencent').on('click', function () {
TSOCapObj.refresh();
});
//6-初始化,参数传入显示验证码的元素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($('.verification-code').length==0){
$('.btn_mes').eq(0).append(" <div class='verification-code'>请输入正确的验证码</div>");
}
$('.btn_mes_text').blur(function(){
$('.btn_mes_text').text("");
});
} else {
window.location="/buyer/vshop/license?aid=" + APP.aid;
fn(ret_json.ticket);
}
});
}
}
//7- 页面初始化函数的执行
$(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;
}
# Javascript
# 制作图形验证码
# js
# 验证码制作
# 图像验证码
# JS制作图形验证码实现代码
# JavaScript生成图形验证码
# 原生JavaScript实现简单的图形验证码
# JavaScript实现图形验证码完整代码
# 验证码
# 所示
# 请输入
# 错误信息
# 回调
# 图一
# 都是
# 图二
# 他们的
# 图四
# 腾讯
# 所需
# 提示信息
# 第二个
# 弹出
# 要对
# 如图
# 当我们
# 按下
# 跳转
相关文章:
网站视频怎么制作,哪个网站可以免费收看好莱坞经典大片?
黑客如何利用漏洞与弱口令入侵网站服务器?
韩国代理服务器如何选?解析IP设置技巧与跨境访问优化指南
小程序网站制作需要准备什么资料,如何制作小程序?
太原网站制作公司有哪些,网约车营运证查询官网?
香港服务器建站指南:外贸独立站搭建与跨境电商配置流程
如何在宝塔面板中修改默认建站目录?
定制建站是什么?如何实现个性化需求?
网站制作网站,深圳做网站哪家比较好?
如何在云服务器上快速搭建个人网站?
linux top下的 minerd 木马清除方法
官网自助建站平台指南:在线制作、快速建站与模板选择全解析
定制建站流程解析:需求评估与SEO优化功能开发指南
手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?
清除minerd进程的简单方法
标准网站视频模板制作软件,现在有哪个网站的视频编辑素材最齐全的,背景音乐、音效等?
平台云上自主建站:模板化设计与智能工具打造高效网站
如何在建站宝盒中设置产品搜索功能?
详解jQuery停止动画——stop()方法的使用
logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?
建站主机如何安装配置?新手必看操作指南
如何在七牛云存储上搭建网站并设置自定义域名?
制作网站外包平台,自动化接单网站有哪些?
,南京靠谱的征婚网站?
如何在香港免费服务器上快速搭建网站?
免费公司网站制作软件,如何申请免费主页空间做自己的网站?
弹幕视频网站制作教程下载,弹幕视频网站是什么意思?
建站之星如何助力网站排名飙升?揭秘高效技巧
如何选择高效响应式自助建站源码系统?
如何有效防御Web建站篡改攻击?
如何通过老薛主机一键快速建站?
宁波自助建站系统如何快速打造专业企业网站?
高端网站建设与定制开发一站式解决方案 中企动力
高防服务器租用如何选择配置与防御等级?
陕西网站制作公司有哪些,陕西凌云电器有限公司官网?
国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?
成都网站制作报价公司,成都工业用气开户费用?
建站主机服务器选型指南与性能优化方案解析
如何通过虚拟主机快速搭建个人网站?
高防服务器租用指南:配置选择与快速部署攻略
建站主机系统SEO优化与智能配置核心关键词操作指南
建站之星IIS配置教程:代码生成技巧与站点搭建指南
广州建站公司哪家好?十大优质服务商推荐
c++23 std::expected怎么用 c++优雅处理函数错误返回【详解】
如何通过免费商城建站系统源码自定义网站主题与功能?
高防服务器租用首荐平台,企业级优惠套餐快速部署
天河区网站制作公司,广州天河区如何办理身份证?需要什么资料有预约的网站吗?
如何在万网ECS上快速搭建专属网站?
,想在网上投简历,哪几个网站比较好?
江苏网站制作公司有哪些,江苏书法考级官方网站?
*请认真填写需求信息,我们会在24小时内与您取得联系。