原生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 相关文章推荐
页面调用单个swf文件,嵌套出多个方法。
Nov 21 Javascript
javascript获取url上某个参数的方法
Nov 08 Javascript
一行命令搞定node.js 版本升级
Jul 20 Javascript
JavaScript的作用域和块级作用域概念理解
Sep 21 Javascript
JS实现点击文字对应DIV层不停闪动效果的方法
Mar 02 Javascript
关于js里的this关键字的理解
Aug 17 Javascript
jQuery实现简易的天天爱消除小游戏
Oct 16 Javascript
JavaScript开发者必备的10个Sublime Text插件
Feb 27 Javascript
jQuery hover事件简单实现同时绑定2个方法
Jun 07 Javascript
Vue.2.0.5过渡效果使用技巧
Mar 16 Javascript
详解如何解决使用JSON.stringify时遇到的循环引用问题
Mar 23 Javascript
JavaScript获取URL参数的方法分享
Apr 07 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中Session的概念
2006/10/09 PHP
php中过滤非法字符的具体实现
2013/10/29 PHP
php中in_array函数用法分析
2014/11/15 PHP
php中的钩子理解及应用实例分析
2019/08/30 PHP
JavaScript的模块化:封装(闭包),继承(原型) 介绍
2013/07/22 Javascript
javascript 数组排序函数sort和reverse使用介绍
2013/11/21 Javascript
jquery库或JS文件在eclipse下报错问题解决方法
2014/04/17 Javascript
Node.js实现在目录中查找某个字符串及所在文件
2014/09/03 Javascript
javascript实现依次输入input自动定焦
2014/12/23 Javascript
JavaScript比较两个对象是否相等的方法
2015/02/06 Javascript
js实现仿QQ秀换装效果的方法
2015/03/04 Javascript
JavaScript使用function定义对象并调用的方法
2015/03/23 Javascript
javascript动态添加checkbox复选框的方法
2015/12/23 Javascript
基于JQuery的$.ajax方法进行异步请求导致页面闪烁的解决办法
2016/05/10 Javascript
jQuery和JavaScript节点插入元素的方法对比
2016/11/18 Javascript
javaScript嗅探执行神器-sniffer.js
2017/02/14 Javascript
详解在WebStorm中添加Vue.js单文件组件的高亮及语法支持
2017/10/21 Javascript
使用vue-cli创建项目的图文教程(新手入门篇)
2018/05/02 Javascript
微信小程序form表单组件示例代码
2018/07/15 Javascript
详解Node.js amqplib 连接 Rabbit MQ最佳实践
2019/01/24 Javascript
解决谷歌搜索技术文章时打不开网页问题的python脚本
2013/02/10 Python
Python脚本实现自动发带图的微博
2016/04/27 Python
Python黑魔法@property装饰器的使用技巧解析
2016/06/16 Python
spyder常用快捷键(分享)
2017/07/19 Python
Python实现判断给定列表是否有重复元素的方法
2018/04/11 Python
tensorflow1.0学习之模型的保存与恢复(Saver)
2018/04/23 Python
在python里使用await关键字来等另外一个协程的实例
2020/05/04 Python
python新手学习可变和不可变对象
2020/06/11 Python
HTML5引入的新数组TypedArray介绍
2012/12/24 HTML / CSS
斯洛伐克香水和化妆品购物网站:Parfemy-Elnino.sk
2020/01/28 全球购物
中学教师自我鉴定
2014/02/07 职场文书
劳动纠纷调解协议书格式
2014/11/30 职场文书
小学优秀学生评语
2014/12/29 职场文书
2015年计划生育责任书
2015/05/08 职场文书
集英社今正式宣布 成立游戏公司“集英社Games”
2022/03/31 其他游戏
Java版 简易五子棋小游戏
2022/05/04 Java/Android