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 相关文章推荐
一个收集图片的bookmarlet(js 刷新页面中的图片)
May 27 Javascript
jQuery.get、jQuery.getJSON、jQuery.post无法返回JSON问题的解决方法
Jul 28 Javascript
jquery getScript动态加载JS方法改进详解
Nov 15 Javascript
Javascript call和apply区别及使用方法
Nov 14 Javascript
js实现选中页面文字将其分享到新浪微博
Nov 05 Javascript
JS获取多维数组中相同键的值实现方法示例
Jan 06 Javascript
React-Native做一个文本输入框组件的实现代码
Aug 10 Javascript
vue操作动画的记录animate.css实例代码
Apr 26 Javascript
转换layUI的数据表格中的日期格式方法
Sep 19 Javascript
小程序如何自主实现拦截器的示例代码
Nov 04 Javascript
jQuery实现滑动星星评分效果(每日分享)
Nov 13 jQuery
Vue实现按钮级权限方案
Nov 21 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网站在线人数统计
2008/04/09 PHP
php实现的九九乘法口诀表简洁版
2014/07/28 PHP
thinkphp分页实现效果
2016/10/13 PHP
用JavaScript事件串连执行多个处理过程的方法
2007/03/09 Javascript
JavaScript 以对象为索引的关联数组
2010/05/19 Javascript
js实现的跟随鼠标移动的时钟效果(中英文日期显示)
2011/01/17 Javascript
jquery slibings选取同级其他元素的实现代码
2013/11/15 Javascript
jquery的trigger和triggerHandler的区别示例介绍
2014/04/20 Javascript
javascript中Array()数组函数详解
2015/08/23 Javascript
Javascript的比较汇总
2016/07/25 Javascript
谈谈Vue.js——vue-resource全攻略
2017/01/16 Javascript
JS三目运算(三元运算)方法详解
2017/03/01 Javascript
ES6新特性之解构、参数、模块和记号用法示例
2017/04/01 Javascript
js插件实现图片滑动验证码
2020/09/29 Javascript
简单谈谈CommonsChunkPlugin抽取公共模块
2017/12/31 Javascript
浅谈VUE单页应用首屏加载速度优化方案
2018/08/28 Javascript
Vue函数式组件的应用实例详解
2019/08/30 Javascript
微信小程序实现导航栏和内容上下联动功能代码
2020/06/29 Javascript
Vue Elenent实现表格相同数据列合并
2020/11/30 Vue.js
使用python编写android截屏脚本双击运行即可
2014/07/21 Python
简单谈谈python中的Queue与多进程
2016/08/25 Python
Python数据分析之真实IP请求Pandas详解
2016/11/18 Python
在python3环境下的Django中使用MySQL数据库的实例
2017/08/29 Python
Python使用文件锁实现进程间同步功能【基于fcntl模块】
2017/10/16 Python
Pycharm代码无法复制,无法选中删除,无法编辑的解决方法
2018/10/22 Python
梅尔频率倒谱系数(mfcc)及Python实现
2019/06/18 Python
pandas 数据结构之Series的使用方法
2019/06/21 Python
C++的几个面试题附答案
2016/08/03 面试题
单位门卫岗位职责
2013/12/20 职场文书
优秀少先队员主要事迹材料
2014/05/28 职场文书
公司领导班子对照材料
2014/08/18 职场文书
党的群众路线教育实践活动制度建设计划方案
2014/10/31 职场文书
2014年维稳工作总结
2014/11/18 职场文书
独生子女证明范本
2015/06/19 职场文书
ajax请求前端跨域问题原因及解决方案
2021/10/16 Javascript
安装Ruby和 Rails的详细步骤
2022/04/19 Ruby