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 相关文章推荐
Open and Print a Word Document
Jun 15 Javascript
js控制web打印(局部打印)方法整理
May 29 Javascript
js读取注册表的键值示例
Sep 25 Javascript
关闭浏览器输入框自动补齐 兼容IE,FF,Chrome等主流浏览器
Feb 11 Javascript
javascript实现表格排序 编辑 拖拽 缩放
Jan 02 Javascript
JavaScript操作XML文件之XML读取方法
Jun 09 Javascript
将页面table内容与样式另存成excel文件的方法
Aug 05 Javascript
javascript 判断两个日期之差的示例代码
Sep 05 Javascript
手机图片预览插件photoswipe.js使用总结
Aug 25 Javascript
AngularJs directive详解及示例代码
Sep 01 Javascript
vue框架制作购物车小球动画效果实例代码
Sep 26 Javascript
node.JS路径解析之PATH模块使用方法详解
Feb 06 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的网址
2006/11/25 PHP
ThinkPHP多语言支持与多模板支持概述
2014/08/22 PHP
PHP设置进度条的方法
2015/07/08 PHP
PHP经典面试题之设计模式(经常遇到)
2015/10/15 PHP
php版微信公众平台之微信网页登陆授权示例
2016/09/23 PHP
Javascript创建自定义对象 创建Object实例添加属性和方法
2012/06/04 Javascript
JavaScript获取某年某月的最后一天附截图
2014/06/23 Javascript
jQuery实现防止提交按钮被双击的方法
2015/03/24 Javascript
用javascript实现自动输出网页文本
2015/07/30 Javascript
js组件SlotMachine实现图片切换效果制作抽奖系统
2016/04/17 Javascript
浅谈jquery中的each方法$.each、this.each、$.fn.each
2016/06/23 Javascript
jQuery实现两列等高并自适应高度
2016/12/22 Javascript
vue.js 初体验之Chrome 插件开发实录
2017/05/13 Javascript
js排序与重组的实例讲解
2017/08/28 Javascript
jquery实现企业定位式导航效果
2018/01/01 jQuery
原生JS实现列表子元素顺序反转的方法分析
2018/07/02 Javascript
JS解析后台返回的JSON格式数据实例
2018/08/06 Javascript
Vue.js图片预览插件使用详解
2018/08/27 Javascript
Vue  webpack 项目自动打包压缩成zip文件的方法
2019/07/24 Javascript
简单实现节流函数和防抖函数过程解析
2019/10/08 Javascript
react实现移动端下拉菜单的示例代码
2020/01/16 Javascript
python连接mongodb操作数据示例(mongodb数据库配置类)
2013/12/31 Python
kali中python版本的切换方法
2019/07/11 Python
Python常用库大全及简要说明
2020/01/17 Python
Python 动态变量名定义与调用方法
2020/02/09 Python
使用pytorch 筛选出一定范围的值
2020/06/28 Python
python 如何设置守护进程
2020/10/29 Python
CSS3条纹背景制作的实战攻略
2016/05/31 HTML / CSS
美国家庭鞋店:Shoe Sensation
2019/09/27 全球购物
explicit和implicit的含义
2012/11/15 面试题
如何提高MySql的安全性
2014/06/19 面试题
新闻学毕业生自荐信
2013/11/15 职场文书
高中美术教学反思
2014/01/19 职场文书
工程开工庆典邀请函
2014/02/01 职场文书
给市场的环保建议书
2014/05/14 职场文书
班级管理经验交流材料
2015/11/02 职场文书