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自制提示框tooltip改进版
Aug 01 Javascript
浅谈javascript中的数据类型转换
Dec 27 Javascript
Vue.js系列之vue-router(上)(3)
Jan 03 Javascript
javascript计算对象长度的方法
Oct 25 Javascript
vue.extend实现alert模态框弹窗组件
Apr 28 Javascript
详解在React.js中使用PureComponent的重要性和使用方式
Jul 10 Javascript
解决vue中修改了数据但视图无法更新的情况
Aug 27 Javascript
React 使用recharts实现散点地图的示例代码
Dec 07 Javascript
如何进行微信公众号开发的本地调试的方法
Jun 16 Javascript
解决Layui当中的导航条动态添加后渲染失败的问题
Sep 25 Javascript
最全vue的vue-amap使用高德地图插件画多边形范围的示例代码
Jul 17 Javascript
vue的hash值原理也是table切换实例代码
Dec 14 Vue.js
详解关于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
提示Trying to clone an uncloneable object of class Imagic的解决
2011/10/27 PHP
基于php验证码函数的使用示例
2013/05/03 PHP
百度地图API应用之获取用户的具体位置
2014/06/10 PHP
利用php输出不同的心形图案
2016/04/22 PHP
php基于openssl的rsa加密解密示例
2016/07/11 PHP
PHP完全二叉树定义与实现方法示例
2017/10/09 PHP
Javascript 调试利器 Firebug使用详解六
2009/07/05 Javascript
让JavaScript拥有类似Lambda表达式编程能力的方法
2010/09/12 Javascript
理解JAVASCRIPT中hasOwnProperty()的作用
2013/06/05 Javascript
js实现右下角可关闭最小化div(可用于展示推荐内容)
2013/06/24 Javascript
jquery批量设置属性readonly和disabled的方法
2014/01/24 Javascript
js replace(a,b)之替换字符串中所有指定字符的方法
2016/08/17 Javascript
Javascript oop设计模式 面向对象编程简单实例介绍
2016/12/13 Javascript
JQuery Dialog对话框 不能通过Esc关闭的原因分析及解决办法
2017/01/18 Javascript
vue单页面应用打开新窗口显示跳转页面的实例
2018/09/21 Javascript
详解vue-router数据加载与缓存使用总结
2018/10/29 Javascript
浅谈JS的原型和继承
2019/05/08 Javascript
js回文数的4种判断方法示例
2019/06/04 Javascript
Vue 3.0双向绑定原理的实现方法
2019/10/23 Javascript
小程序自定义导航栏兼容适配所有机型(附完整案例)
2020/04/26 Javascript
JS实现移动端可折叠导航菜单(现代都市风)
2020/07/07 Javascript
详解为什么Vue中的v-if和v-for不建议一起用
2021/01/13 Vue.js
浅谈Python爬取网页的编码处理
2016/11/04 Python
手把手教你用python抢票回家过年(代码简单)
2018/01/21 Python
html5使用canvas绘制文字特效
2014/12/15 HTML / CSS
香港莎莎官网Sasa.com:亚洲著名国际化妆品商城
2019/11/10 全球购物
GAZMAN官网:澳大利亚领先的男装品牌
2019/12/19 全球购物
机械绘图员岗位职责
2013/11/19 职场文书
即兴演讲稿
2014/01/04 职场文书
海南地接欢迎词
2014/01/14 职场文书
“学雷锋活动月”总结
2014/03/09 职场文书
党建目标管理责任书
2014/07/25 职场文书
奖金申请报告模板
2015/05/15 职场文书
离婚撤诉申请书范本
2015/05/18 职场文书
教师节大会主持词
2015/07/06 职场文书
优秀共产党员主要事迹材料
2015/11/05 职场文书