canvas画随机的四位验证码
时间:2019-10-25
本文章向大家介绍canvas画随机的四位验证码,主要包括canvas画随机的四位验证码使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
效果图如下:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>验证码</title> </head> <body> <canvas id="canvas"></canvas> </body> </html> <script> class IdentifyCode { constructor(canvasId, width, height) { this.canvas = document.querySelector(`#${canvasId}`); this.ctx = this.canvas.getContext("2d"); this.canvas.width = width; this.canvas.height = height; this.arrRange = []; this.code = ""; this.range(); this.buildCode(); this.drawBakcGround(); this.drawInterferingline(); this.drawInterferencePoint(); this.drawWord(); } //生成一个随机数 randomNum(min, max) { return parseInt(Math.random() * (max - min) + min); } //生成随机颜色 randomColor(min, max) { var r = this.randomNum(min, max); var g = this.randomNum(min, max); var b = this.randomNum(min, max); return `rgb(${r},${g},${b})` } //生成字母和数字 range() { this.arrRange = []; //0-9 for (let i = "0".charCodeAt(0); i <= "9".charCodeAt(0); i++) { this.arrRange.push(String.fromCharCode(i)) } //A-Z for (let i = "A".charCodeAt(0); i <= "Z".charCodeAt(0); i++) { this.arrRange.push(String.fromCharCode(i)); } //a-z for (let i = "a".charCodeAt(0); i < "z".charCodeAt(0); i++) { this.arrRange.push(String.fromCharCode(i)) } } //生成四位随机码 buildCode() { var code = ""; for (let i = 0; i < 4; i++) { code += this.arrRange[Math.floor(Math.random() * this.arrRange.length)] } this.code = code; } //画背景 drawBakcGround() { this.ctx.fillStyle = this.randomColor(180, 230); this.ctx.fillRect(0, 0, this.canvas.width, this.canvas.height); this.ctx.fill() } //写字 drawWord() { var bothSide = 15;//两边间距 var letterSpace = (this.canvas.width - 2 * bothSide) / 4; for (var i = 0; i < 4; i++) { this.ctx.font = `${this.randomNum(this.canvas.width / 4, this.canvas.width / 2)}px 黑体`; this.ctx.fillStyle = this.randomColor(80, 150); this.ctx.save(); this.ctx.translate(bothSide + letterSpace * i, this.canvas.height / 2) this.ctx.rotate(Math.random() * (Math.PI / 6) * (-1) ** (Math.round(Math.random()))); this.ctx.textBaseline = "middle"; this.ctx.fillText(this.code[i], 0, 0); this.ctx.restore(); } } //画干扰线 drawInterferingline() { for (var i = 0; i < 6; i++) { this.ctx.beginPath(); this.ctx.moveTo(this.randomNum(0, this.canvas.width), this.randomNum(0, this.canvas.height)); this.ctx.lineTo(this.randomNum(0, this.canvas.width), this.randomNum(0, this.canvas.height)); this.ctx.closePath(); this.ctx.strokeStyle = this.randomColor(180, 230); this.ctx.lineWidth = Math.ceil(Math.random() * 2); this.ctx.stroke(); } } //画干扰点 drawInterferencePoint() { var r = 1; var num = 40; for (var i = 0; i < Math.floor(num); i++) { this.ctx.beginPath(); this.ctx.fillStyle = this.randomColor(150, 200); console.log(this.randomNum(0, this.canvas.width), this.randomNum(0, this.canvas.height), r, 0, 2 * Math.PI, true) this.ctx.arc(this.randomNum(0, this.canvas.width), this.randomNum(0, this.canvas.height), r, 0, 2 * Math.PI, true) this.ctx.fill(); this.ctx.closePath(); } } //更换验证码 update() { this.clear(); this.range(); this.buildCode(); this.drawBakcGround(); this.drawInterferingline(); this.drawInterferencePoint(); this.drawWord(); } //清除 clear() { this.ctx.clearRect(0, 0, this.canvas.width, this.canvas.height) } } var identifyCode = new IdentifyCode("canvas", 100, 40); document.querySelector("#canvas").onclick = function () { identifyCode.update() } </script>
原文地址:https://www.cnblogs.com/jiajiamiao/p/11737562.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法