原生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 相关文章推荐
出现“不能执行已释放的Script代码”错误的原因及解决办法
Aug 29 Javascript
input 输入框内的输入事件详细分析
Mar 17 Javascript
分享27款非常棒的jQuery 表单插件
Mar 28 Javascript
js如何判断不同系统的浏览器类型
Oct 28 Javascript
window.returnValue使用方法示例介绍
Jul 03 Javascript
Jquery通过JSON字符串创建JSON对象
Aug 24 Javascript
EasyUI学习之Combobox下拉列表(1)
Dec 29 Javascript
javascript数据结构之多叉树经典操作示例【创建、添加、遍历、移除等】
Aug 01 Javascript
bootstrap实现点击删除按钮弹出确认框的实例代码
Aug 16 Javascript
angular 用Observable实现异步调用的方法
Dec 27 Javascript
vue项目中实现缓存的最佳方案详解
Jul 11 Javascript
Vue时间轴 vue-light-timeline的用法说明
Oct 29 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
paypal即时到账php实现代码
2010/11/28 PHP
PHP生成迅雷、快车、旋风等软件的下载链接代码实例
2014/05/12 PHP
PHP生成随机密码方法汇总
2015/08/27 PHP
两款万能的php分页类
2015/11/12 PHP
php利用gd库为图片添加水印
2016/11/09 PHP
Zend Framework数据库操作方法实例总结
2016/12/11 PHP
用PHP去掉文件头的Unicode签名(BOM)方法
2017/06/22 PHP
php+mysql开发中的经验与常识小结
2019/03/25 PHP
新浪的图片新闻效果
2007/01/13 Javascript
javascript TextArea动态显示剩余字符
2008/10/22 Javascript
javascript 鼠标拖动图标技术
2010/02/07 Javascript
JQuery实现倒计时按钮的实现代码
2012/03/23 Javascript
了解了这些才能开始发挥jQuery的威力
2013/10/10 Javascript
JavaScript设计模式之外观模式实例
2014/10/10 Javascript
jQuery中slidedown与slideup方法用法示例
2016/09/16 Javascript
vue.js+Echarts开发图表放大缩小功能实例
2017/06/09 Javascript
基于BootStrap multiselect.js实现的下拉框联动效果
2017/07/28 Javascript
详解Vue中使用Echarts的两种方式
2018/07/03 Javascript
js实现动态添加上传文件页面
2018/10/22 Javascript
JS学习笔记之原型链和利用原型实现继承详解
2019/05/29 Javascript
Vue组件实现触底判断
2019/06/26 Javascript
vue组件中节流函数的失效的原因和解决方法
2020/12/02 Vue.js
python requests 测试代理ip是否生效
2018/07/25 Python
python对列进行平移变换的方法(shift)
2019/01/10 Python
python中sort和sorted排序的实例方法
2019/08/26 Python
Keras Convolution1D与Convolution2D区别说明
2020/05/22 Python
CSS3实现曲线阴影和翘边阴影
2016/05/03 HTML / CSS
html5绘制时钟动画
2014/12/15 HTML / CSS
英国男士时尚网站:Dandy Fellow
2018/02/09 全球购物
岗位职责说明书
2014/05/07 职场文书
参赛口号
2014/06/16 职场文书
乡镇干部先进性教育活动个人整改措施
2014/09/16 职场文书
辩论会主持词
2015/07/03 职场文书
python删除csv文件的行列
2021/04/06 Python
浅谈redis缓存在项目中的使用
2021/05/20 Redis
python使用shell脚本创建kafka连接器
2022/04/29 Python