原生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 相关文章推荐
jQuery的运行机制和设计理念分析
Apr 05 Javascript
javascript窗口宽高,鼠标位置,滚动高度(详细解析)
Nov 18 Javascript
JQuery获取表格数据示例代码
May 26 Javascript
sea.js常用的api简易文档
Nov 15 Javascript
JavaScript自定义分页样式
Jan 17 Javascript
在vue.js中抽出公共代码的方法示例
Jun 08 Javascript
微信小程序 功能函数小结(手机号验证*、密码验证*、获取验证码*)
Dec 08 Javascript
Angularjs之如何在跨域请求中传输Cookie的方法
Jun 01 Javascript
浅谈关于iview表单验证的问题
Sep 29 Javascript
详解vue-router导航守卫
Jan 19 Javascript
Vue响应式原理Observer、Dep、Watcher理解
Jun 06 Javascript
如何在现代JavaScript中编写异步任务
Jan 31 Javascript
原生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
ThinkPHP入口文件设置及相关注意事项分析
2014/12/05 PHP
jQuery 性能优化指南(3)
2009/05/21 Javascript
jquery中对于批量deferred的处理方法
2014/01/22 Javascript
常用的几段javascript代码分享
2014/03/25 Javascript
再分享70+免费的jquery 图片滑块效果插件和教程
2014/12/15 Javascript
javascript中几个容易混淆的概念总结
2015/04/14 Javascript
js实现三张图(文)片一起切换的banner焦点图
2015/08/25 Javascript
jQuery Form 表单提交插件之formSerialize,fieldSerialize,fieldValue,resetForm,clearForm,clearFields的应用
2016/01/23 Javascript
JavaScript学习笔记之ES6数组方法
2016/03/25 Javascript
解析JavaScript面向对象概念中的Object类型与作用域
2016/05/10 Javascript
javascript实现粘贴qq截图功能(clipboardData)
2016/05/29 Javascript
通用无限极下拉菜单的实现代码
2016/05/31 Javascript
JavaScript中removeChild 方法开发示例代码
2016/08/15 Javascript
JavaScript日期对象(Date)基本用法示例
2017/01/18 Javascript
js实现漫天星星效果
2017/01/19 Javascript
Node.js中使用mongoose操作mongodb数据库的方法
2017/09/12 Javascript
Three.js利用Detector.js插件如何实现兼容性检测详解
2017/09/26 Javascript
Vue模拟数据,实现路由进入商品详情页面的示例
2018/08/31 Javascript
Koa日志中间件封装开发详解
2019/03/09 Javascript
vue 地图可视化 maptalks 篇实例代码详解
2019/05/21 Javascript
[02:56]DOTA2亚洲邀请赛 VG出场战队巡礼
2015/02/07 DOTA
Python中的Numeric包和Numarray包使用教程
2015/04/13 Python
python生成器表达式和列表解析
2016/03/10 Python
用Python写王者荣耀刷金币脚本
2017/12/21 Python
Python简单实现控制电脑的方法
2018/01/22 Python
python的pandas工具包,保存.csv文件时不要表头的实例
2018/06/14 Python
python3爬虫怎样构建请求header
2018/12/23 Python
django与vue的完美结合_实现前后端的分离开发之后在整合的方法
2019/08/12 Python
利用python计算时间差(返回天数)
2019/09/07 Python
python实现自动化报表功能(Oracle/plsql/Excel/多线程)
2019/12/02 Python
Urban Outfitters美国官网:美国生活方式品牌
2016/08/26 全球购物
瑜伽国际:Yoga International
2018/04/18 全球购物
Bluebella美国官网:英国性感内衣品牌
2018/10/04 全球购物
2015大学生党员自我评价范文
2015/03/03 职场文书
企业财务总监岗位职责
2015/04/03 职场文书
RPM包方式安装Oracle21c的方法详解
2021/08/23 Oracle