<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
本文範例為大家分享了vue實現web前端登入頁數位驗證碼的具體程式碼,供大家參考,具體內容如下
1.建立code.js資料夾下面是js程式碼
function GVerify(options) { console.log(); // 建立一個圖形驗證碼物件,接收options物件為引數 this.con = document.getElementById(options) this.options = { // 預設options引數值 id: '', // 容器Id canvasId: 'verifyCanvas', // canvas的ID width: this.con.offsetWidth, // 預設canvas寬度 height: this.con.offsetHeight, // 預設canvas高度 type: 'number', // 圖形驗證碼預設型別blend:數位字母混合型別、number:純數位、letter:純字母 code: '' } if (Object.prototype.toString.call(options) === '[object Object]') { // 判斷傳入引數型別 for (var i in options) { // 根據傳入的引數,修改預設引數值 this.options[i] = options[i] } } else { this.options.id = options } this.options.numArr = '0,1,2,3,4,5,6,7,8,9'.split(',') this.options.letterArr = getAllLetter() this._init() this.refresh() } GVerify.prototype = { /** 版本號**/ version: '1.0.0', /** 初始化方法**/ _init: function () { var canvas = document.createElement('canvas') canvas.id = this.options.canvasId let { width, height } = this.options canvas.width = width canvas.height = height canvas.style.cursor = 'pointer' canvas.innerHTML = '您的瀏覽器版本不支援canvas' this.con.appendChild(canvas) var parent = this canvas.onclick = function () { parent.refresh() } }, /** 生成驗證碼**/ refresh: function () { var canvas = document.getElementById(this.options.canvasId) if (canvas.getContext) { var ctx = canvas.getContext('2d') } ctx.textBaseline = 'middle' ctx.fillStyle = randomColor(180, 240) ctx.fillRect(0, 0, this.options.width, this.options.height) if (this.options.type === 'blend') { // 判斷驗證碼型別 var txtArr = this.options.numArr.concat(this.options.letterArr) } else if (this.options.type === 'number') { var txtArr = this.options.numArr } else { var txtArr = this.options.letterArr } this.options.code = '' for (var i = 1; i <= 4; i++) { var txt = txtArr[randomNum(0, txtArr.length)] this.options.code += txt ctx.font = randomNum(this.options.height / 2, this.options.height) + 'px SimHei' // 隨機生成字型大小 ctx.fillStyle = randomColor(50, 160) // 隨機生成字型顏色 ctx.shadowOffsetX = randomNum(-3, 3) ctx.shadowOffsetY = randomNum(-3, 3) ctx.shadowBlur = randomNum(-3, 3) ctx.shadowColor = 'rgba(0, 0, 0, 0.3)' var x = this.options.width / 5 * i var y = this.options.height / 2 var deg = randomNum(-30, 30) /** 設定旋轉角度和座標原點**/ ctx.translate(x, y) ctx.rotate(deg * Math.PI / 180) ctx.fillText(txt, 0, 0) /** 恢復旋轉角度和座標原點**/ ctx.rotate(-deg * Math.PI / 180) ctx.translate(-x, -y) } /** 繪製干擾線**/ for (var i = 0; i < 4; i++) { ctx.strokeStyle = randomColor(40, 180) ctx.beginPath() ctx.moveTo(randomNum(0, this.options.width), randomNum(0, this.options.height)) ctx.lineTo(randomNum(0, this.options.width), randomNum(0, this.options.height)) ctx.stroke() } /** 繪製干擾點**/ for (var i = 0; i < this.options.width / 4; i++) { ctx.fillStyle = randomColor(0, 255) ctx.beginPath() ctx.arc(randomNum(0, this.options.width), randomNum(0, this.options.height), 1, 0, 2 * Math.PI) ctx.fill() } }, /** 驗證驗證碼**/ validate: function (code) { var code = code.toLowerCase() var v_code = this.options.code.toLowerCase() if (code == v_code) { return true } else { return false } } } /** 生成字母陣列**/ function getAllLetter() { var letterStr = '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' return letterStr.split(',') } /** 生成一個亂數**/ function randomNum(min, max) { return Math.floor(Math.random() * (max - min) + min) } /** 生成一個隨機色**/ function randomColor(min, max) { var r = randomNum(min, max) var g = randomNum(min, max) var b = randomNum(min, max) return 'rgb(' + r + ',' + g + ',' + b + ')' } export { GVerify }
2.code.js在元件中引入
3.在data中定義如下兩個屬性
value:"", verifyCode: "",
4.在mounted中執行方法
mounted(){ this.verifyCode = new GVerify("auth_code"); },
5.在template中定義div需要給div設定寬高
<div id="auth_code"></div>
6.在登入請求前進行判斷成功向下執行,失敗return並同時執行this.verifyCode.refresh()方法切換驗證碼,同時按照邏輯 在登入失敗賬號或密碼錯誤時也需要執行this.verifyCode.refresh()切換驗證碼
if(this.verifyCode.validate(this.value)){ }else{ this.$message({ message: "驗證碼錯誤", type: 'warning' }); this.verifyCode.refresh(); return }
7.效果圖
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45