layUI的验证码功能及校验实例


Posted in Javascript onOctober 25, 2019

用layUI的伙伴一定发现了:

layUI的验证码是长死图!!!

没错,是死图~~~~

什么倒霉框架。

下面代码是canvas验证码及校验。稍微修改及可用。

我嵌套到项目里的效果如图:

layUI的验证码功能及校验实例

<!DOCTYPE html>
<html>
<!-- head -->
<head>
 <meta charset="utf-8">
 <title>图片登录验证</title>
 <meta name="renderer" content="webkit">
 <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
 <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
 
 <style>
  body{margin: 10px;}
  .demo-carousel{height: 200px; line-height: 200px; text-align: center;}
  .code {
    width: 400px;
    margin: 0 auto;
  }
  .input-val {
    width: 295px;
    background: #ffffff;
    height: 2.8rem;
    padding: 0 2%;
    border-radius: 5px;
    border: none;
    border: 1px solid rgba(0,0,0,.2);
    font-size: 1.0625rem;
  }
  #canvas {
    float: right;
    display: inline-block;
    border: 1px solid #ccc;
    border-radius: 5px;
    cursor: pointer;
  }
  .btn {
    width: 100px;
    height: 40px;
    background: #f1f1f1;
    border: 1px solid #ccc;
    border-radius: 5px;
    margin: 20px auto 0;
    display: block;
    font-size: 1.2rem;
    color: #e22e1c;
    cursor: pointer;
  }
  * {
    margin: 0;
    padding: 0;
    box-sizing: border-box;
  }
 </style>
</head>
 
<script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script>
 
  <body cz-shortcut-listen="true" class="layui-layout-body">
    <div class="layui-layer-move">
    
    <div class="code">
      <input type="text" value="" placeholder="请输入验证码(不区分大小写)" class="input-val">
      <canvas id="canvas" width="100" height="43"></canvas>
      <button class="btn">提交</button>
    </div>
    
    </div>
  </body>
<script>
 
  $(function(){
    var show_num = [];
    draw(show_num);
 
    $("#canvas").on('click',function(){
      draw(show_num);
    })
    $(".btn").on('click',function(){
      var val = $(".input-val").val().toLowerCase();
      var num = show_num.join("");
      if(val==''){
        alert('请输入验证码!');
      }else if(val == num){
        alert('提交成功!');
        $(".input-val").val('');
        draw(show_num);
 
      }else{
        alert('验证码错误!请重新输入!');
        $(".input-val").val('');
        draw(show_num);
      }
    })
  })
 
  function draw(show_num) {
    var canvas_width=$('#canvas').width();
    var canvas_height=$('#canvas').height();
    var canvas = document.getElementById("canvas");//获取到canvas的对象,演员
    var context = canvas.getContext("2d");//获取到canvas画图的环境,演员表演的舞台
    canvas.width = canvas_width;
    canvas.height = canvas_height;
    var sCode = "A,B,C,E,F,G,H,J,K,L,M,N,P,Q,R,S,T,W,X,Y,Z,1,2,3,4,5,6,7,8,9,0";
    var aCode = sCode.split(",");
    var aLength = aCode.length;//获取到数组的长度
    
    for (var i = 0; i <= 3; i++) {
      var j = Math.floor(Math.random() * aLength);//获取到随机的索引值
      var deg = Math.random() * 30 * Math.PI / 180;//产生0~30之间的随机弧度
      var txt = aCode[j];//得到随机的一个内容
      show_num[i] = txt.toLowerCase();
      var x = 10 + i * 20;//文字在canvas上的x坐标
      var y = 20 + Math.random() * 8;//文字在canvas上的y坐标
      context.font = "bold 23px 微软雅黑";
 
      context.translate(x, y);
      context.rotate(deg);
 
      context.fillStyle = randomColor();
      context.fillText(txt, 0, 0);
 
      context.rotate(-deg);
      context.translate(-x, -y);
    }
    for (var i = 0; i <= 5; i++) { //验证码上显示线条
      context.strokeStyle = randomColor();
      context.beginPath();
      context.moveTo(Math.random() * canvas_width, Math.random() * canvas_height);
      context.lineTo(Math.random() * canvas_width, Math.random() * canvas_height);
      context.stroke();
    }
    for (var i = 0; i <= 30; i++) { //验证码上显示小点
      context.strokeStyle = randomColor();
      context.beginPath();
      var x = Math.random() * canvas_width;
      var y = Math.random() * canvas_height;
      context.moveTo(x, y);
      context.lineTo(x + 1, y + 1);
      context.stroke();
    }
  }
 
  function randomColor() {//得到随机的颜色值
    var r = Math.floor(Math.random() * 256);
    var g = Math.floor(Math.random() * 256);
    var b = Math.floor(Math.random() * 256);
    return "rgb(" + r + "," + g + "," + b + ")";
  }
</script>
</html>

以上这篇layUI的验证码功能及校验实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
点击按钮或链接不跳转只刷新页面的脚本整理
Oct 22 Javascript
JavaScript检测实例属性, 原型属性
Feb 04 Javascript
JS实现的网页倒计时数字时钟效果
Mar 02 Javascript
JavaScript严格模式详解
Nov 18 Javascript
JavaScript计划任务后台运行的方法
Dec 18 Javascript
详解webpack-dev-server使用http-proxy解决跨域问题
Jan 13 Javascript
基于vue 动态加载图片src的解决方法
Feb 05 Javascript
vue 权限认证token的实现方法
Jul 17 Javascript
VUE预渲染及遇到的坑
Sep 03 Javascript
vue+SSM实现验证码功能
Dec 07 Javascript
解决vue init webpack 下载依赖卡住不动的问题
Nov 09 Javascript
JS前端宏任务微任务及Event Loop使用详解
Jul 23 Javascript
layui点击按钮页面会自动刷新的解决方案
Oct 25 #Javascript
详解node登录接口之密码错误限制次数(含代码)
Oct 25 #Javascript
Vue 用Vant实现时间选择器的示例代码
Oct 25 #Javascript
vue登录以及权限验证相关的实现
Oct 25 #Javascript
vue-next/runtime-core 源码阅读指南详解
Oct 25 #Javascript
JS实现简单tab选项卡切换
Oct 25 #Javascript
vue项目从node8.x升级到12.x后的问题解决
Oct 25 #Javascript
You might like
php ci框架验证码实例分析
2013/06/26 PHP
PHP中fwrite与file_put_contents性能测试代码
2013/08/02 PHP
PHP实现动态压缩js与css文件的方法
2018/05/02 PHP
下拉菜单点击实现连接跳转功能的js代码
2013/05/19 Javascript
简单的代码实现jquery定时器
2013/11/17 Javascript
jquery的attr方法禁用表单元素禁用输入内容
2014/06/23 Javascript
JavaScript中window.showModalDialog()用法详解
2014/12/18 Javascript
Zabbix添加Node.js监控的方法
2016/10/20 Javascript
jQuery中DOM节点删除之empty与remove
2017/01/20 Javascript
微信小程序出现wx.navigateTo页面不跳转问题的解决方法
2017/12/26 Javascript
js实现黑白div块画空心的图形
2018/12/13 Javascript
Angular8引入百度Echarts进行图表分析的实现代码
2019/11/27 Javascript
基于JavaScript实现贪吃蛇游戏
2020/03/16 Javascript
Js on及addEventListener原理用法区别解析
2020/07/11 Javascript
搭建vscode+vue环境的详细教程
2020/08/31 Javascript
javascript自定义加载loading效果
2020/09/15 Javascript
[06:16]第十四期-国士无双绝地翻盘之撼地神牛
2014/06/24 DOTA
Python实现统计单词出现的个数
2015/05/28 Python
PyQt5每天必学之日历控件QCalendarWidget
2018/04/19 Python
Python实现的本地文件搜索功能示例【测试可用】
2018/05/30 Python
Python实现的json文件读取及中文乱码显示问题解决方法
2018/08/06 Python
pygame游戏之旅 添加游戏界面按键图形
2018/11/20 Python
python抖音表白程序源代码
2019/04/07 Python
python的debug实用工具 pdb详解
2019/07/12 Python
python开发前景如何
2020/06/11 Python
在django中实现choices字段获取对应字段值
2020/07/12 Python
python+selenium实现12306模拟登录的步骤
2021/01/21 Python
Bodum官网:咖啡和茶壶、玻璃器皿、厨房电器等
2018/08/01 全球购物
eBay荷兰购物网站:eBay.nl
2020/06/26 全球购物
党支部书记先进事迹
2014/01/17 职场文书
国庆节演讲稿
2014/05/27 职场文书
项目工作说明书
2014/07/29 职场文书
讲文明知礼仪演讲稿
2014/09/13 职场文书
2015军训通讯稿大全
2015/07/18 职场文书
Redis安装使用RedisJSON模块的方法
2022/03/23 Redis
Mysql分析设计表主键为何不用uuid
2022/03/31 MySQL