用canvas写随机验证码

body部分

<canvas id="vas"></canvas>
<button>刷新验证码</button>

js部分
①:设置属性/获取元素

var vas = document.getElementById("vas");//获取canvas
var pen = vas.getContext("2d");//绘制画笔
var btn = document.getElementsByTagName("button")[0];//获取按钮

var obj = {
	arr : [],//验证码内容
	wid : 500,//canvas宽度
	hei : 500,//canvas高度
	con_text : 4,//验证码文字数量
	con_boll : 50,//干扰球数量
	con_line : 500,//干扰线数量
	font_min : 12,//最小字体大小
	font_max : 38,//最大字体大小
}//自定义数据

vas.width = obj.wid;//给canvas设置宽
vas.height = obj.hei;//给canvas设置高

②:填充验证码数据

for(var i = 0; i < 26; i ++){
	if(i <= 9){
		obj.arr.push(i);//0-9数字
	}
    obj.arr.push(String.fromCharCode(65+i));//26个大写字母
    obj.arr.push(String.fromCharCode(97+i));//26个小写字母
}

③: 绘制随机颜色函数

function rgb(){
	return "rgb("+~~(Math.random()*256)+","+~~(Math.random()*256)+","+~~(Math.random()*256)+")"
}

④:随机文字/干扰线/干扰球

function fn(){
	pen.clearRect(0,0,obj.wid,obj.hei);//清除画图
	pen.fillStyle = rgb();//填充色
	pen.fillRect(0,0,obj.wid,obj.hei);//绘制矩形
	
	for(var j = 0; j < obj.con_boll; j++){
		pen.beginPath();
		pen.fillStyle = rgb();
		pen.arc(~~(Math.random()*obj.wid),~~(Math.random()*obj.hei),1,0,Math.PI*2);
		pen.fill();
		pen.closePath();
	}//绘制干扰球
	
	for(var i = 0; i < obj.con_text; i ++){
		pen.save();
		pen.beginPath();
		pen.font = ~~(Math.random()*obj.font_max+obj.font_min) +"px 微软雅黑";
		pen.fillStyle = rgb();
		pen.translate(~~(Math.random()*(obj.wid-50)),~~(Math.random()*(obj.hei-50)));
		pen.rotate(Math.PI/180*~~(Math.random()*360))
		pen.textBaseline="top";
		pen.fillText(obj.arr[~~(Math.random()*(obj.arr.length-1))],0,0);
		pen.strokeStyle = rgb();
		pen.lineWidth = 1;
		pen.moveTo(0,0);
		pen.lineTo(50,0);
		pen.stroke();
		pen.restore();
		pen.closePath();
	}//绘制文字/干扰线
}

⑤:绑定点击事件,并且页面初始化

btn.addEventListener("click",fn,false);//绑定点击事件
fn();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是一个使用 Canvas 绘制随机数字验证码的示例代码: ```html <canvas id="captcha" width="120" height="40"></canvas> <button onclick="refresh()">刷新验证码</button> ``` ```javascript const canvas = document.getElementById('captcha'); const ctx = canvas.getContext('2d'); function refresh() { // 清空画布 ctx.clearRect(0, 0, canvas.width, canvas.height); // 绘制背景 ctx.fillStyle = '#f2f2f2'; ctx.fillRect(0, 0, canvas.width, canvas.height); // 绘制随机数字 const code = Math.random().toString().slice(2, 6); ctx.font = 'bold 30px Arial'; ctx.fillStyle = '#333'; ctx.textAlign = 'center'; ctx.textBaseline = 'middle'; ctx.fillText(code, canvas.width / 2, canvas.height / 2); // 绘制干扰线 for (let i = 0; i < 4; i++) { ctx.beginPath(); ctx.moveTo(Math.random() * canvas.width, Math.random() * canvas.height); ctx.lineTo(Math.random() * canvas.width, Math.random() * canvas.height); ctx.strokeStyle = '#ddd'; ctx.stroke(); } } // 初始化验证码 refresh(); ``` 代码中,我们首先获取了 Canvas 对象和 2D 上下文对象 ctx,然后定义了一个 refresh 函数来生成并绘制随机数字验证码。 在 refresh 函数中,我们首先使用 clearRect 方法清空画布,并使用 fillRect 方法绘制灰色背景。接着,我们使用 Math.random 方法生成一个 4 位的随机数字,使用 fillText 方法将其绘制在画布中央。最后,我们使用 beginPath、moveTo、lineTo、strokeStyle 和 stroke 方法来绘制 4 条随机颜色的干扰线。 最后,我们在 HTML 中添加一个按钮,并设置其 onclick 事件为 refresh 函数,以便用户可以通过点击按钮来刷新验证码
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值