jquery使用canvas標(biāo)簽繪制驗(yàn)證碼
<canvas> 元素是為了客戶端矢量圖形而設(shè)計(jì)的。它自己沒有行為,但卻把一個(gè)繪圖 API 展現(xiàn)給客戶端 JavaScript 以使腳本能夠把想繪制的東西都繪制到一塊畫布上。
代碼如下
css:
input{
width: 200px;
height: 32px;
border: 1px solid #000;
box-sizing: border-box ;
}
#c1{
vertical-align: middle;
box-sizing: border-box;
cursor: pointer;
}
#btn{
display: block;
margin-top: 10px;
height: 32px;
font-size: 16px;
}
html:
<div class="code">
<input type="text" value="" id="inputValue" placeholder="請(qǐng)輸入驗(yàn)證碼(不區(qū)分大小寫)">
<canvas id="c1" width="100" height="30"style='border:1px solid black'></canvas>
<button id="btn">提交</button>
</div>
JavaScript:
$(function(){
//存放隨機(jī)的驗(yàn)證碼
var showNum=[]
draw(showNum)
$('#c1').on('click',function(){
draw(showNum)
})
$('#btn').on('click',function(){
var s = $('#inputValue').val().toLowerCase()
var s1 = showNum.join("")
if(s==s1){
alert('提交成功')
}else{
alert('驗(yàn)證碼錯(cuò)誤')
draw(showNum)
}
})
//封裝一個(gè)隨機(jī)驗(yàn)證碼繪制畫布的函數(shù)
function draw(showNum){
//獲取canvas
var canvas= $('#c1')
var ctx=canvas[0].getContext('2d')
//獲取畫布的寬度和高度
var canvas_width=canvas.width()
var canvas_height=canvas.height()
//清空之前繪制的內(nèi)容
//0,0 清空的起始坐標(biāo)
//矩形的寬度和高度
ctx.clearRect(0,0,canvas_width,canvas_height)
//開始繪制
var scode='a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,0,1,2,3,4,5,6,7,8,9'
console.log("123");
var arrCode=scode.split(',')
console.log(arrCode);
var arrLength =arrCode.length
for(var i=0;i<4;i++){
var index=Math.floor(Math.random()*arrCode.length)
//隨機(jī)一個(gè)字符
var txt = arrCode[index]
showNum[i]=txt.toLowerCase()
//開始控制字符的繪制位置
var x=10+20*i//每一個(gè)驗(yàn)證碼繪制的起始點(diǎn)的x坐標(biāo)
var y=20+Math.random()*8//起始點(diǎn)y坐標(biāo)
ctx.font='bold 20px 微軟雅黑'
//開始旋轉(zhuǎn)字符
var deg = Math.random()-0.5
//canvas想實(shí)現(xiàn)繪制內(nèi)容具有傾斜效果,必須先平移
//為了把旋轉(zhuǎn)點(diǎn)移動(dòng)到繪制內(nèi)容的地方
ctx.translate(x,y)
ctx.rotate(deg)
//設(shè)置繪制的顏色隨機(jī)的顏色
ctx.fillStyle=randomColor()
ctx.fillText(txt,0,0)
//把canvas復(fù)原
ctx.rotate(-deg)
ctx.translate(-x,-y)
// ctx.stroke()
}
for(var i=0;i<=30;i++){
if(i<5){
//繪制線
ctx.strokeStyle=randomColor()
ctx.beginPath()
ctx.moveTo(Math.random()*canvas_width,Math.random()*canvas_height)
ctx.lineTo(Math.random()*canvas_width,Math.random()*canvas_height)
ctx.stroke()
}
//繪制點(diǎn)
ctx.strokeStyle=randomColor()
ctx.beginPath()
x=Math.random()*canvas_width
y=Math.random()*canvas_height
ctx.moveTo(x,y)
ctx.lineTo(x+1,y+1)
ctx.stroke()
}
}
function randomColor(){
var r=Math.floor(Math.random()*256)
var g=Math.floor(Math.random()*256)
var b=Math.floor(Math.random()*256)
return`rgb(${r},${g},$)`
}
})
能夠?qū)崿F(xiàn)這個(gè)效果

如果單擊canvas標(biāo)簽會(huì)更換一張圖片
輸入之后如果正確會(huì)彈出"輸入正確"的提示框
錯(cuò)誤會(huì)提示"輸入錯(cuò)誤"并且點(diǎn)擊確定后會(huì)更換一張驗(yàn)證碼框
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- JQuery實(shí)現(xiàn)簡(jiǎn)單驗(yàn)證碼提示解決方案
- jquery實(shí)現(xiàn)手機(jī)發(fā)送驗(yàn)證碼的倒計(jì)時(shí)代碼
- jQuery實(shí)現(xiàn)發(fā)送驗(yàn)證碼并60秒倒計(jì)時(shí)功能
- Jquery插件實(shí)現(xiàn)點(diǎn)擊獲取驗(yàn)證碼后60秒內(nèi)禁止重新獲取
- jQuery插件實(shí)現(xiàn)靜態(tài)HTML驗(yàn)證碼校驗(yàn)
- jQuery 點(diǎn)擊獲取驗(yàn)證碼按鈕及倒計(jì)時(shí)功能
- jQuery實(shí)現(xiàn)驗(yàn)證碼功能
- jQuery實(shí)現(xiàn)一個(gè)簡(jiǎn)單的驗(yàn)證碼功能
- jquery實(shí)現(xiàn)表單獲取短信驗(yàn)證碼代碼
- jQuery實(shí)現(xiàn)的手機(jī)發(fā)送驗(yàn)證碼倒計(jì)時(shí)效果代碼分享
相關(guān)文章
jQuery實(shí)現(xiàn)根據(jù)類型自動(dòng)顯示和隱藏表單
這篇文章主要給大家分享了jQuery實(shí)現(xiàn)根據(jù)類型自動(dòng)顯示和隱藏表單的代碼,非常的簡(jiǎn)單實(shí)用,僅僅10行代碼,推薦給大家,希望能給大家一些提示。2015-03-03
jQuery常用數(shù)據(jù)處理方法小結(jié)
這篇文章主要介紹了jQuery常用數(shù)據(jù)處理方法,實(shí)例總結(jié)了trim、param、isArray、isFunction、each等jQuery常用的數(shù)據(jù)處理方法,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-02-02
基于jquery實(shí)現(xiàn)的文字淡入淡出效果
這篇文章介紹了jquery實(shí)現(xiàn)的文字淡入淡出效果實(shí)例,有需要的朋友可以參考一下2013-11-11
jQuery得到多個(gè)值只能用取Class ,不能用取ID的方法
下面小編就為大家?guī)?lái)一篇jQuery得到多個(gè)值只能用取Class ,不能用取ID的方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧2016-12-12
用jQuery toggleClass 實(shí)現(xiàn)鼠標(biāo)移上變色
這篇文章主要介紹了用jQuery toggleClass 實(shí)現(xiàn)鼠標(biāo)移上變色,需要的朋友可以參考下2014-05-05
jQuery插件實(shí)現(xiàn)帶圓點(diǎn)的焦點(diǎn)圖片輪播切換
這篇文章主要介紹了jQuery插件實(shí)現(xiàn)帶圓點(diǎn)的焦點(diǎn)圖片輪播切換的代碼,使用起來(lái)也非常的簡(jiǎn)單方便,有需要的小伙伴可以參考下2016-01-01
JQuery 選擇器、DOM節(jié)點(diǎn)操作練習(xí)實(shí)例
下面小編就為大家?guī)?lái)一篇JQuery 選擇器、DOM節(jié)點(diǎn)操作練習(xí)實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧2017-09-09
Jquery change(fontsize,background) 改變顏色與背景的代碼
基于Jquery的改變顏色與背景的代碼,對(duì)于學(xué)習(xí)jquery的朋友可以參考下。2010-05-05
jQuery中removeClass()方法用法實(shí)例
這篇文章主要介紹了jQuery中removeClass()方法用法,實(shí)例分析了removeClass()方法的功能、定義及從匹配元素刪除一個(gè)或多個(gè)類的使用技巧,需要的朋友可以參考下2015-01-01

