原生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实现存储HTML字符串示例
Apr 21 Javascript
详解AngularJS中module模块的导入导出
Dec 10 Javascript
使用jquery.form.js实现图片上传的方法
May 05 Javascript
json定义及jquery操作json的方法
Sep 29 Javascript
JS前端笔试题分析
Dec 19 Javascript
jQuery is not defined 错误原因与解决方法小结
Mar 19 Javascript
javascript数据结构之串的概念与用法分析
Apr 12 Javascript
Angular4表单验证代码详解
Sep 03 Javascript
判断div滑动到底部的scroll实例代码
Nov 15 Javascript
vscode vue 文件模板的配置方法
Jul 23 Javascript
JavaScript常用工具函数大全
May 06 Javascript
解决Vue中使用keepAlive不缓存问题
Aug 04 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
php生成二维码的几种方式整理及使用实例
2013/06/03 PHP
PHP简单操作MongoDB的方法(安装及增删改查)
2016/05/26 PHP
PHP XML和数组互相转换详解
2016/10/26 PHP
PHP实现的字符串匹配算法示例【sunday算法】
2017/12/19 PHP
PHP封装的分页类与简单用法示例
2019/02/25 PHP
js 页面输出值
2008/11/30 Javascript
javascript 动态加载 css 方法总结
2009/07/11 Javascript
JavaScript sup方法入门实例(把字符串显示为上标)
2014/10/20 Javascript
javascript原型链继承用法实例分析
2015/01/28 Javascript
jQuery基于json与cookie实现购物车的方法
2016/04/15 Javascript
原生JS实现几个常用DOM操作API实例
2017/01/19 Javascript
Angular.js去除页面中显示的空行方法示例
2017/03/30 Javascript
关于vue中 $emit的用法详解
2018/04/12 Javascript
JS回调函数 callback的理解与使用案例分析
2019/09/09 Javascript
JavaScript相等运算符的九条规则示例详解
2019/10/20 Javascript
微信小程序实用代码段(收藏版)
2019/12/17 Javascript
python语言使用技巧分享
2016/05/31 Python
利用numpy实现一、二维数组的拼接简单代码示例
2017/12/15 Python
Python实现识别图片内容的方法分析
2018/07/11 Python
python3安装speech语音模块的方法
2018/12/24 Python
python匹配两个短语之间的字符实例
2018/12/25 Python
对Python 获取类的成员变量及临时变量的方法详解
2019/01/22 Python
Python 抓取微信公众号账号信息的方法
2019/06/14 Python
关于Pytorch MaxUnpool2d中size操作方式
2020/01/03 Python
python程序文件扩展名知识点详解
2020/02/27 Python
python 使用tkinter+you-get实现视频下载器
2020/11/17 Python
实列教程 一款基于jquery和css3的响应式二级导航菜单
2014/11/13 HTML / CSS
利用HTML5实现使用按钮控制背景音乐开关
2015/09/21 HTML / CSS
Banggood官网:面向全球客户的综合商城
2017/04/19 全球购物
大学生求职自我评价
2014/01/16 职场文书
甜美蛋糕店创业计划书
2014/01/30 职场文书
财务管理专业毕业生求职信
2014/06/02 职场文书
党员个人自我剖析材料
2014/10/08 职场文书
经典爱情感言
2015/08/03 职场文书
如何利用golang运用mysql数据库
2022/03/13 Golang
详解Spring Bean的配置方式与实例化
2022/06/10 Java/Android