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 相关文章推荐
Extjs学习笔记之九 数据模型(上)
Jan 11 Javascript
js获取location.href的参数实例代码
Aug 02 Javascript
jQuery动画效果animate和scrollTop结合使用实例
Apr 02 Javascript
JS自定义选项卡函数及用法实例分析
Sep 02 Javascript
纯js代码实现简单计算器
Dec 02 Javascript
纯JavaScript代码实现文本比较工具
Feb 17 Javascript
js实现简单的碰壁反弹效果
Aug 30 Javascript
Javascript中构造函数要注意的一些坑
Jan 23 Javascript
微信小程序拼接图片链接无底洞深入探究
Sep 03 Javascript
element-ui 本地化使用教程详解
Oct 28 Javascript
vue 实现LED数字时钟效果(开箱即用)
Dec 08 Javascript
详解TypeScript中的类型保护
Apr 29 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定时自动生成静态HTML的实现代码
2010/06/20 PHP
php构造函数的继承方法
2015/02/09 PHP
laravel 验证错误信息到 blade模板的方法
2019/09/29 PHP
Javascript模块化编程(一)AMD规范(规范使用模块)
2013/01/17 Javascript
只需一行代码,轻松实现一个在线编辑器
2013/11/12 Javascript
JS实现点击上移下移LI行数据的方法
2015/08/05 Javascript
个人网站留言页面(前端jQuery编写、后台php读写MySQL)
2016/05/03 Javascript
Vue shopCart 组件开发详解
2018/01/26 Javascript
用JS实现根据当前时间随机生成流水号或者订单号
2018/05/31 Javascript
vue使用v-if v-show页面闪烁,div闪现的解决方法
2018/10/12 Javascript
ES6知识点整理之函数对象参数默认值及其解构应用示例
2019/04/17 Javascript
使用Node.js写一个代码生成器的方法步骤
2019/05/10 Javascript
详解elementui之el-image-viewer(图片查看器)
2019/08/30 Javascript
Vue中Table组件行内右键菜单实现方法(基于 vue + AntDesign)
2019/11/21 Javascript
微信小程序开发中var that =this的用法详解
2020/01/18 Javascript
vue3.0生命周期的示例代码
2020/09/24 Javascript
jquery自定义组件实例详解
2020/12/31 jQuery
[00:32]DOTA2上海特级锦标赛 COL战队宣传片
2016/03/04 DOTA
[00:20]DOTA2荣耀之路7:-ah fu-抢盾
2018/05/31 DOTA
python解析xml模块封装代码
2014/02/07 Python
python爬虫爬取淘宝商品信息
2018/02/23 Python
对Python3 pyc 文件的使用详解
2019/02/16 Python
Python3.0中普通方法、类方法和静态方法的比较
2019/05/03 Python
基于Python的Jenkins的二次开发操作
2020/05/12 Python
使用keras实现BiLSTM+CNN+CRF文字标记NER
2020/06/29 Python
django中ImageField的使用详解
2020/12/21 Python
AC Lens:购买隐形眼镜
2017/02/26 全球购物
Antler英国官网:购买安特丽行李箱、拉杆箱
2019/08/25 全球购物
土耳其新趋势女装购物网站:Addax
2020/01/07 全球购物
德国家具、照明、家居用品网上商店:Wayfair.de
2020/02/13 全球购物
一套Delphi的笔试题一
2016/02/14 面试题
2014年单位植树节活动方案
2014/03/23 职场文书
教师岗位聘任书范文
2014/03/29 职场文书
教师群众路线剖析材料
2014/09/29 职场文书
python实现批量提取指定文件夹下同类型文件
2021/04/05 Python
TV动画《八十龟酱观察日记》第四季宣传PV公布
2022/04/06 日漫