js實(shí)現(xiàn)驗(yàn)證碼案例
本文實(shí)例為大家分享了js實(shí)現(xiàn)驗(yàn)證碼的具體代碼,供大家參考,具體內(nèi)容如下

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: 20px;
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>
<br>
<button id="btn">提交</button>
</div>
js代碼:
使用了部分jQuery的方法,請(qǐng)記得先引入jQuery
$(function(){
// 存放隨機(jī)的驗(yàn)證碼
var showNum = []
draw(showNum)
$("#c1").click(function(){
draw(showNum)
})
$("#btn").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)證碼放在畫布上
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,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,1,2,3,4,5,6,7,8,9,"
var arrCode = scode.split(",")
var arrLength = arrCode.length
for(var i = 0;i<4;i++){
var index = Math.floor(Math.random()*arrCode.length)
var txt = arrCode[index]//隨機(jī)一個(gè)字符
showNum[i] = txt.toLowerCase()//轉(zhuǎn)化為小寫存入驗(yàn)證碼數(shù)組
// 開始控制字符的繪制位置
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)
}
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()
var x = Math.random()*canvas_width
var y = Math.random()*canvas_height
ctx.moveTo(x,y)
ctx.lineTo(x+1,y+1)
ctx.stroke()
}
}
// 隨機(jī)顏色
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},$)`
}
})
隨便寫的案例,有錯(cuò)誤還請(qǐng)大家多多指教
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Jsp生成頁面驗(yàn)證碼的方法[附代碼]
- JavaScript 驗(yàn)證碼的實(shí)例代碼(附效果圖)
- js實(shí)現(xiàn)簡(jiǎn)單的驗(yàn)證碼
- js實(shí)現(xiàn)點(diǎn)擊獲取驗(yàn)證碼倒計(jì)時(shí)效果
- JS 驗(yàn)證碼功能的三種實(shí)現(xiàn)方式
- js生成的驗(yàn)證碼的實(shí)現(xiàn)與技術(shù)分析
- js生成驗(yàn)證碼并直接在前端判斷
- js+canvas實(shí)現(xiàn)滑動(dòng)拼圖驗(yàn)證碼功能
- JS制作圖形驗(yàn)證碼實(shí)現(xiàn)代碼
- js實(shí)現(xiàn)登錄注冊(cè)框手機(jī)號(hào)和驗(yàn)證碼校驗(yàn)(前端部分)
相關(guān)文章
layui 解決form表單點(diǎn)擊無反應(yīng)的問題
今天小編就為大家分享一篇layui 解決form表單點(diǎn)擊無反應(yīng)的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-10-10
JS實(shí)現(xiàn)十分鐘倒計(jì)時(shí)代碼實(shí)例
在本篇文章里我們給大家分享了關(guān)于JS實(shí)現(xiàn)十分鐘倒計(jì)時(shí)的相關(guān)實(shí)例代碼,有需要的朋友們可以學(xué)習(xí)下。2018-10-10
JS監(jiān)控關(guān)閉瀏覽器操作的實(shí)例詳解
這篇文章主要介紹了JS監(jiān)控關(guān)閉瀏覽器操作的實(shí)例詳解的相關(guān)資料,希望通過本大家能幫助到大家,需要的朋友可以參考下2017-09-09
JS組件Bootstrap Table表格行拖拽效果實(shí)現(xiàn)代碼
這篇文章分享了JS組件Bootstrap Table表格行拖拽效果實(shí)現(xiàn)代碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2015-12-12
javascript實(shí)現(xiàn)的元素拖動(dòng)函數(shù)宿主為瀏覽器
這篇文章主要介紹了javascript實(shí)現(xiàn)的元素拖動(dòng),將相應(yīng)的元素對(duì)象的引用傳到函數(shù)中2014-07-07
在點(diǎn)擊div中的p時(shí),如何阻止事件冒泡
本文主要介紹了在點(diǎn)擊div中的p時(shí),如何阻止事件冒泡的方法,具有很好的參考價(jià)值,下面跟著小編一起來看下吧2017-02-02
js實(shí)現(xiàn)表格拖動(dòng)選項(xiàng)
這篇文章主要為大家詳細(xì)介紹了原生js實(shí)現(xiàn)表格拖動(dòng)選項(xiàng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-04-04
跟我學(xué)Node.js(四)---Node.js的模塊載入方式與機(jī)制
Node.js中模塊可以通過文件路徑或名字獲取模塊的引用。模塊的引用會(huì)映射到一個(gè)js文件路徑,除非它是一個(gè)Node內(nèi)置模塊。Node的內(nèi)置模塊公開了一些常用的API給開發(fā)者,并且它們?cè)贜ode進(jìn)程開始的時(shí)候就預(yù)加載了。2014-06-06

