JS+HTML5 canvas绘制验证码示例


Posted in Javascript onDecember 05, 2018

本文实例讲述了JS+HTML5 canvas绘制验证码。分享给大家供大家参考,具体如下:

css样式:

<style>
body{
  text-align: center;
}
canvas{
  background:#ddd;
}
</style>

HTML部分:

body中添加标签canvas:

<canvas id="c3"></canvas>

js部分:

//创建两个变量保存验证码的宽度和高度
  var w = 120;
  var h = 30;
//将变量值赋值给canvas
  c3.width = w;
  c3.height = h;
//获取画笔
  var ctx = c3.getContext("2d");
//创建两个函数,返回指定范围内的随机数,随机颜色
//随机数
  function rn(min,max){
    var n = Math.random()*(max-min)+min;
    return Math.floor(n);
  }
//随机颜色
  function rc(min,max){
    var r = rn(min,max);
    var g = rn(min,max);
    var b = rn(min,max);
    return `rgb(${r},${g},${b})`;
}
//填充的背景
  ctx.fillStyle=rc(180,230);
  ctx.fillRect(0,0,w,h);
//创建一个随机的文字[字母和数字]4个
  var pool = "ABCDEFGHIJKabced胡歌0123456789哈哼哈哈";
  var str ="";
  for(var i = 0;i<4;i++){
    var index = Math.floor(Math.random()*pool.length);
    str +=pool[index];
}
//console.log(str);
  ctx.font = "30px SimHei";
  ctx.fillStyle = rc(80,180);//文字颜色
  ctx.textBaseline="top";
  ctx.fillText(str,20,0);//在(20,0)处开始填充文字
//绘制6条干扰线
  for(var i = 0;i<6;i++){
    ctx.strokeStyle = rc(0,255);
    ctx.beginPath();
    ctx.moveTo(rn(0,w),rn(0,h));
    ctx.lineTo(rn(0,w),rn(0,h));
    ctx.stroke();
  }
//绘制50个干扰点
  for(var i = 0;i<50;i++){
    ctx.fillStyle = rc(0,255);
    ctx.beginPath();
    ctx.arc(rn(0,w),rn(0,h),1,0,2*Math.PI);
    ctx.fill();
  }

感兴趣的朋友可以使用在线HTML/CSS/JavaScript前端代码调试运行工具:http://tools.3water.com/code/WebCodeRun,测试上述代码运行效果。

或者使用在线HTML/CSS/JavaScript代码运行工具:http://tools.3water.com/code/HtmlJsRun,测试如下完整示例代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>3water.com canvas绘制验证码</title>
<style>
body{
  text-align: center;
}
canvas{
  background:#ddd;
}
</style>
</head>
<body>
<canvas id="c3"></canvas>
<script>
//创建两个变量保存验证码的宽度和高度
  var w = 120;
  var h = 30;
//将变量值赋值给canvas
  c3.width = w;
  c3.height = h;
//获取画笔
  var ctx = c3.getContext("2d");
//创建两个函数,返回指定范围内的随机数,随机颜色
//随机数
  function rn(min,max){
    var n = Math.random()*(max-min)+min;
    return Math.floor(n);
  }
//随机颜色
  function rc(min,max){
    var r = rn(min,max);
    var g = rn(min,max);
    var b = rn(min,max);
    return `rgb(${r},${g},${b})`;
}
//填充的背景
  ctx.fillStyle=rc(180,230);
  ctx.fillRect(0,0,w,h);
//创建一个随机的文字[字母和数字]4个
  var pool = "ABCDEFGHIJKabced胡歌0123456789哈哼哈哈";
  var str ="";
  for(var i = 0;i<4;i++){
    var index = Math.floor(Math.random()*pool.length);
    str +=pool[index];
}
//console.log(str);
  ctx.font = "30px SimHei";
  ctx.fillStyle = rc(80,180);//文字颜色
  ctx.textBaseline="top";
  ctx.fillText(str,20,0);//在(20,0)处开始填充文字
//绘制6条干扰线
  for(var i = 0;i<6;i++){
    ctx.strokeStyle = rc(0,255);
    ctx.beginPath();
    ctx.moveTo(rn(0,w),rn(0,h));
    ctx.lineTo(rn(0,w),rn(0,h));
    ctx.stroke();
  }
//绘制50个干扰点
  for(var i = 0;i<50;i++){
    ctx.fillStyle = rc(0,255);
    ctx.beginPath();
    ctx.arc(rn(0,w),rn(0,h),1,0,2*Math.PI);
    ctx.fill();
  }
</script>
</body>
</html>

运行结果如下:

JS+HTML5 canvas绘制验证码示例

更多关于JavaScript相关内容还可查看本站专题:《JavaScript+HTML5特效与技巧汇总》、《JavaScript图形绘制技巧总结》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》及《JavaScript数学运算用法总结》

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
jquery 学习笔记 传智博客佟老师附详细注释
Sep 12 Javascript
javaScript矢量图表库-gRaphael几行代码实现精美的条形图/饼图/点图/曲线图
Jan 09 Javascript
js 阻止子元素响应父元素的onmouseout事件具体实现
Dec 23 Javascript
json中换行符的处理方法示例介绍
Jun 10 Javascript
jQuery实现获取table表格第一列值的方法
Mar 01 Javascript
js编写三级联动简单案例
Dec 21 Javascript
jQuery解析返回的xml和json方法详解
Jan 05 Javascript
svg动画之动态描边效果
Feb 22 Javascript
详解Angular模板引用变量及其作用域
Nov 23 Javascript
vue中更改数组中属性,在页面中不生效的解决方法
Oct 30 Javascript
javascript 代码是如何被压缩的示例代码
May 06 Javascript
小程序实现侧滑删除功能
Jun 25 Javascript
详解关于Angular4 ng-zorro使用过程中遇到的问题
Dec 05 #Javascript
JS实现简单的点赞与踩功能示例
Dec 05 #Javascript
node.js实现为PDF添加水印的示例代码
Dec 05 #Javascript
vue组件之间通信实例总结(点赞功能)
Dec 05 #Javascript
JS获取今天是本月第几周、本月共几周、本月有多少天、是今年的第几周、是今年的第几天的示例代码
Dec 05 #Javascript
JS获取月的第几周和年的第几周实例代码
Dec 05 #Javascript
JavaScript实现学生在线做题计时器功能
Dec 05 #Javascript
You might like
用PHP和ACCESS写聊天室(四)
2006/10/09 PHP
php面向对象全攻略 (四)构造方法与析构方法
2009/09/30 PHP
与文件上传有关的php配置参数总结
2013/06/14 PHP
php操作MongoDB基础教程(连接、新增、修改、删除、查询)
2014/03/25 PHP
PHP实现抓取HTTPS内容
2014/12/01 PHP
smarty模板引擎中自定义函数的方法
2015/01/22 PHP
Yii控制器中filter过滤器用法分析
2016/07/15 PHP
PHP使用curl制作简易百度搜索
2016/11/03 PHP
PHP连接MYSQL数据库的3种常用方法
2017/02/27 PHP
Thinkphp5.0 框架Model模型简单用法分析
2019/10/11 PHP
Prototype使用指南之selector.js
2007/01/10 Javascript
JavaScript高级程序设计 阅读笔记(二十) js错误处理
2012/08/14 Javascript
js 鼠标移动显示图片的简单实例
2013/12/25 Javascript
JavaScript中Number.MAX_VALUE属性的使用方法
2015/06/04 Javascript
微信小程序 LOL 英雄介绍开发实例
2016/09/30 Javascript
Vue.js学习之计算属性
2017/01/22 Javascript
详解vue渲染从后台获取的json数据
2017/07/06 Javascript
JavaScript实现无刷新上传预览图片功能
2017/08/02 Javascript
JS+canvas绘制的动态机械表动画效果
2017/09/12 Javascript
BetterScroll 在移动端滚动场景的应用
2017/09/18 Javascript
jQuery实现模糊搜索功能的方法分析
2018/06/29 jQuery
JavaScript深入V8引擎以及编写优化代码的5个技巧
2019/06/24 Javascript
vue 使用 canvas 实现手写电子签名
2020/03/06 Javascript
vue项目打包之开发环境和部署环境的实现
2020/04/23 Javascript
[56:00]2018DOTA2亚洲邀请赛 4.6 淘汰赛 VP vs TNC 第二场
2018/04/10 DOTA
使用IronPython把Python脚本集成到.NET程序中的教程
2015/03/31 Python
python中实现迭代器(iterator)的方法示例
2017/01/19 Python
Python机器学习之K-Means聚类实现详解
2018/02/22 Python
Pycharm取消py脚本中SQL识别的方法
2018/11/29 Python
如何在 Django 模板中输出 &quot;{{&quot;
2020/01/24 Python
Python3合并两个有序数组代码实例
2020/08/11 Python
EM Cosmetics官网:由彩妆大神Michelle Phan创办的独立品牌
2020/04/27 全球购物
药剂专业求职信
2014/06/20 职场文书
寒假社会实践个人总结
2015/03/06 职场文书
python基于tkinter制作m3u8视频下载工具
2021/04/24 Python
聊聊Python中关于a=[[]]*3的反思
2021/06/02 Python