原生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 相关文章推荐
Ext对基本类型的扩展 ext,extjs,format
Dec 25 Javascript
让你的博文自动带上缩址的实现代码,方便发到微博客上
Dec 28 Javascript
JavaScript运算符小结
Jun 03 Javascript
javascript实现禁止鼠标滚轮事件
Jul 24 Javascript
Jquery ui datepicker设置日期范围,如只能隔3天【实现代码】
May 04 Javascript
浅析JavaScriptSerializer类的序列化与反序列化
Nov 22 Javascript
利用百度地图API获取当前位置信息的实例
Nov 06 Javascript
Vue的elementUI实现自定义主题方法
Feb 23 Javascript
vue-cli项目根据线上环境分别打出测试包和生产包
May 23 Javascript
Vue弹出菜单功能的实现代码
Sep 12 Javascript
vue里如何主动销毁keep-alive缓存的组件
Mar 21 Javascript
vue实现动态按钮功能
May 13 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
基于curl数据采集之单页面并行采集函数get_htmls的使用
2013/04/28 PHP
通过php添加xml文档内容的方法
2015/01/23 PHP
php给一组指定关键词添加span标签的方法
2015/03/31 PHP
php页面,mysql数据库转utf-8乱码,utf-8编码问题总结
2015/08/27 PHP
thinkphp关于简单的权限判定方法
2017/04/03 PHP
PHP商品秒杀问题解决方案实例详解【mysql与redis】
2019/07/22 PHP
js 模拟气泡屏保效果代码
2010/07/10 Javascript
jquery里的正则表达式说明
2011/08/03 Javascript
利用jquery的获取JS文件中的字符串内容
2012/02/14 Javascript
Eval and new funciton not the same thing
2012/12/27 Javascript
js实现touch移动触屏滑动事件
2015/04/17 Javascript
js简单实现标签云效果实例
2015/08/06 Javascript
js实现的页面加载完毕之前loading提示效果完整示例【附demo源码下载】
2016/08/02 Javascript
AngularJS Ajax详解及示例代码
2016/08/17 Javascript
AngularJS的$location使用方法详解
2017/10/19 Javascript
JavaScript判断日期时间差的实例代码
2018/03/01 Javascript
JS中touchstart事件与click事件冲突的解决方法
2018/03/12 Javascript
新年快乐! javascript实现超级炫酷的3D烟花特效
2019/01/30 Javascript
JS实现的自定义map方法示例
2019/05/17 Javascript
微信h5静默和非静默授权获取用户openId的方法和步骤
2020/06/08 Javascript
使用Mixin设计模式进行Python编程的方法讲解
2016/06/21 Python
python DataFrame 修改列的顺序实例
2018/04/10 Python
python 删除非空文件夹的实例
2018/04/26 Python
python操作xlsx文件的包openpyxl实例
2018/05/03 Python
在python中用print()输出多个格式化参数的方法
2019/07/16 Python
教你使用Sublime text3搭建Python开发环境及常用插件安装另分享Sublime text3最新激活注册码
2020/11/12 Python
HTML5标签与HTML4标签的区别示例介绍
2013/07/18 HTML / CSS
HTML5 Canvas绘制五星红旗
2016/05/04 HTML / CSS
手机端用rem+scss做适配的详解
2017/11/15 HTML / CSS
家乐福台湾线上购物网:Carrefour台湾
2020/09/15 全球购物
会计专业应届生求职信
2013/11/24 职场文书
法律进企业活动方案
2014/03/04 职场文书
中学生勤俭节约倡议书
2015/04/29 职场文书
企业管理制度设计时要注意的几种“常见病”!
2019/04/19 职场文书
Redis入门基础常用操作命令整理
2022/06/01 Redis
Nginx如何配置根据路径转发详解
2022/07/23 Servers