原生js+canvas实现验证码


Posted in Javascript onNovember 29, 2020

本文实例为大家分享了js+canvas实现验证码的具体代码,供大家参考,具体内容如下

效果展示:

原生js+canvas实现验证码

源码展示:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>
<style>
 
  canvas {
    border: 1px solid #000;
    vertical-align: bottom;
  }
 
  input {
    padding: 0;
    width: 120px;
    height: 30px;
    vertical-align: bottom;
    border: 1px solid #000;
  }
 
</style>
 
 
<input type="text" name="textContent" placeholder="输入">
<canvas id="can" width="120" height="30"></canvas>
<button>提交</button>
 
 
<script>
 
 
  /*1、背景颜色时随机的
 * 2、其中的内容是随机的
 * 3、内容的颜色 随机的
 * 4、每个字的旋转度数随机的
 * 5、文本的大小随机的
 * 6、干扰线的位置随机的
 * 7、干扰线的颜色随机的
 * 8、干扰点
 * */
 
  var btn = document.querySelector("button");
  var can = document.querySelector("canvas");
  var ctx = can.getContext("2d");
 
  var text = "0123456789abcdefghijklmnopqrstuvwsyzABCDEFGHIGKLMNOPQRSTUVWSYZ";
 
 
  //设置4个内容 将canvas 平分成4分 然后让内容在1/4的空间旋转缩放
  //原理 :每次都是位移旋转之后再回复原位
  for (var i = 0; i < 4; i++) {
    var txt = text[randNum(0,text.length-1)];
 
    ctx.fillStyle = getRandColor(80,150);
    ctx.font=randNum(12,25)+"px '宋体'";
    ctx.textBaseline = "top";
    var x = randNum(0,10);
 
    var deg = randNum(-30,30);
 
    ctx.translate(x+30*i,0);
    ctx.rotate(Math.PI/180*deg);
    ctx.fillText(txt,0,0);
    ctx.rotate(Math.PI/180*-deg);
    ctx.translate(-(x+30*i),0);
 
  }
 
 
  /*干扰点*/
  for(var i=0;i<30;i++){
    ctx.beginPath();
    ctx.arc(randNum(0,120),randNum(0,30),1,0,Math.PI*2);
    ctx.fillStyle=getRandColor(150,180);
    ctx.fill();
  }

 
  /*干扰线*/
  for(var i=0;i<4;i++){
    ctx.beginPath();
    ctx.moveTo(randNum(0,120),randNum(0,30));
    ctx.lineTo(randNum(0,120),randNum(0,30));
    ctx.strokeStyle=getRandColor(150,180);
    ctx.lineWidth= randNum(1,2);
    ctx.stroke();
  }
 
 
  /* 获取随机色值*/
 
  //  a 先获取一个随机数
  console.log(Math.random()); //产生一个0~1之间的随机小数
  var num = Math.random() * (100 - 30 + 1) + 30; //产生一个随机数30~100 之间的数
  console.log(num);
 
  //  b 获取一个区间段的随机数(整数)
  function randNum(min, max) {
    return parseInt(Math.random() * (max - min + 1) + min);
  }
 
  //   c获取随机颜色值
  function getRandColor(min, max) {
    var R = randNum(min, max);
    var G = randNum(min, max);
    var B = randNum(min, max);
 
    return 'rgb(' + R + ',' + G + ',' + B + ')';
  }
 
 
</script>
 
 
</body>
</html>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript实现的使用方向键控制光标在table单元格中切换
Nov 17 Javascript
JS等比例缩小图片尺寸的实例
Feb 27 Javascript
Jquery获取复选框被选中值的简单方法
Jul 04 Javascript
JavaScript实现计算字符串中出现次数最多的字符和出现的次数
Mar 12 Javascript
javascript实现框架高度随内容改变的方法
Jul 23 Javascript
JS实现的驼峰式和连字符式转换功能分析
Dec 21 Javascript
javascript实现滑动解锁功能
Mar 22 Javascript
vue解决一个方法同时发送多个请求的问题
Sep 25 Javascript
如何优雅地取消 JavaScript 异步任务
Mar 22 Javascript
JS数组push、unshift、pop、shift方法的实现与使用方法示例
Apr 29 Javascript
详解在IDEA中将Echarts引入web两种方式(使用js文件和maven的依赖导入)
Jul 11 Javascript
Vue实现购物小球抛物线的方法实例
Nov 22 Vue.js
原生js实现弹幕效果
Nov 29 #Javascript
javascript实现点击小图显示大图
Nov 29 #Javascript
js实现简易点击切换显示或隐藏
Nov 29 #Javascript
webpack4从0搭建组件库的实现
Nov 29 #Javascript
JS指定音频audio在某个时间点进行播放
Nov 28 #Javascript
Vue用mixin合并重复代码的实现
Nov 27 #Vue.js
js实现扫雷源代码
Nov 27 #Javascript
You might like
PHP提取数据库内容中的图片地址并循环输出
2010/03/21 PHP
PHP 第一节 php简介
2012/04/28 PHP
PHP+Memcache实现wordpress访问总数统计(非插件)
2014/07/04 PHP
php获取指定日期之间的各个周和月的起止时间
2014/11/24 PHP
CI框架集成Smarty的方法分析
2016/05/17 PHP
thinkPHP5.0框架引入Traits功能实例分析
2017/03/18 PHP
有效的捕获JavaScript焦点的方法小结
2009/10/08 Javascript
Js event事件在IE、FF兼容性问题
2011/01/01 Javascript
js对列表中第一个值处理与jsp页面对列表中第一个值处理的区别详解
2013/11/05 Javascript
判断浏览器的内核及版本号方法汇总
2015/01/05 Javascript
纯JS前端实现分页代码
2016/06/21 Javascript
jQuery Easyui datagrid/treegrid 清空数据
2016/07/09 Javascript
AngularJS equal比较对象实例详解
2016/09/14 Javascript
基于JS组件实现拖动滑块验证功能(代码分享)
2016/11/18 Javascript
jQuery中弹出iframe内嵌页面元素到父页面并全屏化的实例代码
2016/12/27 Javascript
Bootstrap表单使用方法详解
2017/02/17 Javascript
angularJs的ng-class切换class
2017/06/23 Javascript
vue的diff算法知识点总结
2018/03/29 Javascript
vue组件挂载到全局方法的示例代码
2018/08/02 Javascript
Vue 组件复用多次自定义参数操作
2020/07/27 Javascript
[02:29]DOTA2英雄基础教程 陈
2013/12/17 DOTA
pyqt4教程之实现windows窗口小示例分享
2014/03/07 Python
python爬虫获取京东手机图片的图文教程
2017/12/29 Python
python批量下载网站马拉松照片的完整步骤
2018/12/05 Python
印度网上购物首选目的地:Flipkart
2016/08/01 全球购物
Mybag美国/加拿大:英国奢华包包和名牌手袋网站
2020/02/16 全球购物
戴尔马来西亚官网:Dell Malaysia
2020/05/02 全球购物
XML文档面试题
2015/08/05 面试题
自荐书格式
2013/12/01 职场文书
学期研究性学习个人的自我评价
2014/01/09 职场文书
自强之星事迹材料
2014/05/12 职场文书
2015年中秋节活动总结
2015/03/23 职场文书
上课迟到检讨书
2015/05/06 职场文书
大卫科波菲尔读书笔记
2015/06/30 职场文书
写自招自荐信的绝招!
2019/04/19 职场文书
PyQt5 QThread倒计时功能的实现代码
2021/04/02 Python