使用canvas及js簡單生成驗(yàn)證碼方法
在很多時(shí)候都需要用到驗(yàn)證碼,前端驗(yàn)證碼需要知道Html5中的canvas知識點(diǎn)。驗(yàn)證碼生成步驟是:
1.生成一張畫布canvas
2.生成隨機(jī)數(shù)驗(yàn)證碼
3.在畫布中生成干擾線
4.把驗(yàn)證碼文本填充到畫布中
5.點(diǎn)擊畫布更換驗(yàn)證碼
結(jié)構(gòu)與樣式:
<canvas id="mycanvas" width='90' height='40'>
您的瀏覽器不支持canvas,請換個(gè)瀏覽器試試~
</canvas>
<style>
#mycanvas{
cursor: pointer;
}
</style>
下面來編寫js代碼:
/*生成4位隨機(jī)數(shù)*/
function rand(){
var str="abcdefghijklmnopqrstuvwxyz0123456789";
var arr=str.split("");
var validate="";
var ranNum;
for(var i=0;i<4;i++){
ranNum=Math.floor(Math.random()*36); //隨機(jī)數(shù)在[0,35]之間
validate+=arr[ranNum];
}
return validate;
}
/*干擾線的隨機(jī)x坐標(biāo)值*/
function lineX(){
var ranLineX=Math.floor(Math.random()*90);
return ranLineX;
}
/*干擾線的隨機(jī)y坐標(biāo)值*/
function lineY(){
var ranLineY=Math.floor(Math.random()*40);
return ranLineY;
}
function clickChange(){
var mycanvas=document.getElementById('mycanvas');
var cxt=mycanvas.getContext('2d');
cxt.fillStyle='#000';
cxt.fillRect(0,0,90,40);
/*生成干擾線20條*/
for(var j=0;j<20;j++){
cxt.strokeStyle='#fff';
cxt.beginPath(); //若省略beginPath,則每點(diǎn)擊一次驗(yàn)證碼會累積干擾線的條數(shù)
cxt.moveTo(lineX(),lineY());
cxt.lineTo(lineX(),lineY());
cxt.lineWidth=0.5;
cxt.closePath();
cxt.stroke();
}
cxt.fillStyle='red';
cxt.font='bold 20px Arial';
cxt.fillText(rand(),25,25); //把rand()生成的隨機(jī)數(shù)文本填充到canvas中
}
clickChange();
/*點(diǎn)擊驗(yàn)證碼更換*/
mycanvas.onclick=function(e){
e.preventDefault(); //阻止鼠標(biāo)點(diǎn)擊發(fā)生默認(rèn)的行為
clickChange();
};
這樣就寫好一個(gè)較普通的驗(yàn)證碼了,當(dāng)然也有很多需要優(yōu)化的地方,比如干擾線的隨機(jī)顏色、可以加干擾點(diǎn)以及文本的隨機(jī)位置隨機(jī)顏色等等。趕緊去試試吧~
- 原生js+canvas實(shí)現(xiàn)驗(yàn)證碼
- js+h5 canvas實(shí)現(xiàn)圖片驗(yàn)證碼
- js+canvas繪制圖形驗(yàn)證碼
- JavaScript使用canvas繪制隨機(jī)驗(yàn)證碼
- JS+HTML5 canvas繪制驗(yàn)證碼示例
- JavaScript Canvas實(shí)現(xiàn)驗(yàn)證碼
- js+canvas實(shí)現(xiàn)驗(yàn)證碼功能
- js+canvas實(shí)現(xiàn)滑動拼圖驗(yàn)證碼功能
- js實(shí)現(xiàn)點(diǎn)擊獲取驗(yàn)證碼倒計(jì)時(shí)效果
- js canvas實(shí)現(xiàn)驗(yàn)證碼并獲取驗(yàn)證碼功能
相關(guān)文章
javascript入門之?dāng)?shù)組[新手必看]
本文介紹了javascript 數(shù)組的定義和數(shù)組元素的操作,ECMAScript中的數(shù)組方法...希望對大家有所幫助2016-11-11
js控制href內(nèi)容的連接內(nèi)容的變化示例
這篇文章主要介紹了使用js控制href內(nèi)容的連接內(nèi)容的變化,需要的朋友可以參考下2014-04-04
javascript生成/解析dom的CDATA類型的字段的代碼
javascript生成/解析dom的CDATA類型的字段的代碼...2007-04-04
JS實(shí)現(xiàn)鼠標(biāo)滑過折疊與展開菜單效果代碼
這篇文章主要介紹了JS實(shí)現(xiàn)鼠標(biāo)滑過折疊與展開菜單效果代碼,涉及JavaScript基于鼠標(biāo)事件動態(tài)改變頁面元素樣式的相關(guān)實(shí)現(xiàn)技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-09-09
獲取HTML DOM節(jié)點(diǎn)元素的方法的總結(jié)
在Web應(yīng)用程序特別是Web2.0程序開發(fā)中,經(jīng)常要獲取頁面中某個(gè)元素,然后更新該元素的樣式、內(nèi)容等。如何獲取要更新的元素,是首先要解決的問題。2009-08-08
解決JS浮點(diǎn)數(shù)運(yùn)算出現(xiàn)Bug的方法
解決JS浮點(diǎn)數(shù)運(yùn)算出現(xiàn)Bug的方法,需要的朋友可以參考一下2013-03-03
JavaScript實(shí)現(xiàn)字符串截取的三個(gè)方法總結(jié)
在?JavaScript?中,可以使用?substr()、slice()?和?substring()?方法截取字符串。這篇文章就來通過一些示例和大家聊聊這些方法的具體操作,需要的可以參考一下2023-02-02
如何基于filter實(shí)現(xiàn)網(wǎng)站整體變灰功能
這篇文章主要介紹了如何基于filter實(shí)現(xiàn)網(wǎng)站整體變灰功能,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04

