" />

最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

vue實現(xiàn)web前端登錄頁數(shù)字驗證碼

 更新時間:2022年06月16日 16:40:35   作者:SAN822  
這篇文章主要為大家詳細介紹了vue實現(xiàn)web前端登錄頁數(shù)字驗證碼,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了vue實現(xiàn)web前端登錄頁數(shù)字驗證碼的具體代碼,供大家參考,具體內(nèi)容如下

1.創(chuàng)建code.js文件夾下面是js代碼

function GVerify(options) {
? ? console.log(); // 創(chuàng)建一個圖形驗證碼對象,接收options對象為參數(shù)
? ? this.con = document.getElementById(options)
? ? this.options = { // 默認options參數(shù)值
? ? ? ? id: '', // 容器Id
? ? ? ? canvasId: 'verifyCanvas', // canvas的ID
? ? ? ? width: this.con.offsetWidth, // 默認canvas寬度
? ? ? ? height: this.con.offsetHeight, // 默認canvas高度
? ? ? ? type: 'number', // 圖形驗證碼默認類型blend:數(shù)字字母混合類型、number:純數(shù)字、letter:純字母
? ? ? ? code: ''
? ? }

? ? if (Object.prototype.toString.call(options) === '[object Object]') { // 判斷傳入?yún)?shù)類型
? ? ? ? for (var i in options) { // 根據(jù)傳入的參數(shù),修改默認參數(shù)值
? ? ? ? ? ? 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)
? ? ? ? ? ? /** 設置旋轉(zhuǎn)角度和坐標原點**/
? ? ? ? ? ? ctx.translate(x, y)
? ? ? ? ? ? ctx.rotate(deg * Math.PI / 180)
? ? ? ? ? ? ctx.fillText(txt, 0, 0)
? ? ? ? ? ? /** 恢復旋轉(zhuǎn)角度和坐標原點**/
? ? ? ? ? ? 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
? ? ? ? }
? ? }
}
/** 生成字母數(shù)組**/
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(',')
}
/** 生成一個隨機數(shù)**/
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中執(zhí)行方法

?mounted(){
? ? ? ? this.verifyCode = new GVerify("auth_code");
? ? },

5.在template中定義div需要給div設置寬高

<div id="auth_code"></div>?

6.在登錄請求前進行判斷成功向下執(zhí)行,失敗return并同時執(zhí)行this.verifyCode.refresh()方法切換驗證碼,同時按照邏輯 在登錄失敗賬號或密碼錯誤時也需要執(zhí)行this.verifyCode.refresh()切換驗證碼

if(this.verifyCode.validate(this.value)){
? ? ? ? ? ? ? ? ? ??
? ? ? ? ? ? }else{
? ? ? ? ? ? ? ? ?this.$message({
? ? ? ? ? ? ? ? ? ? ? ? ? ? message: "驗證碼錯誤",
? ? ? ? ? ? ? ? ? ? ? ? ? ? type: 'warning'
? ? ? ? ? ? ? ? ? ? ? ? ? ? });
? ? ? ? ? ? ? ? this.verifyCode.refresh();
? ? ? ? ? ? ? ? return
? ? ? ? ? ? }

7.效果圖

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • Vue Elenent實現(xiàn)表格相同數(shù)據(jù)列合并

    Vue Elenent實現(xiàn)表格相同數(shù)據(jù)列合并

    這篇文章主要為大家詳細介紹了Vue Elenent實現(xiàn)表格相同數(shù)據(jù)列合并,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-11-11
  • Vue如何實現(xiàn)pptx在線預覽

    Vue如何實現(xiàn)pptx在線預覽

    通過PPTXjs插件,實現(xiàn)PPTX文件在線預覽,需下載PPTXjs,將其引入HTML頁面,并編寫相應的HTML和JS代碼,如果是移動端還需調(diào)整div大小,這是一種便捷的前端PPTX轉(zhuǎn)HTML技術,適合網(wǎng)頁展示使用
    2024-09-09
  • vue  composition-api 封裝組合式函數(shù)的操作方法

    vue  composition-api 封裝組合式函數(shù)的操作方法

    在 Vue 應用的概念中,“組合式函數(shù)”(Composables) 是一個利用 Vue 的組合式 API 來封裝和復用有狀態(tài)邏輯的函數(shù),這篇文章主要介紹了vue  composition-api 封裝組合式函數(shù)的操作方法,需要的朋友可以參考下
    2022-10-10
  • vue3中refs用法舉例小結

    vue3中refs用法舉例小結

    這篇文章主要給大家介紹了關于vue3中refs用法舉例的相關資料,Vue.js中的$refs是一個對象,它持有已注冊過ref特性的所有組件和元素,需要的朋友可以參考下
    2023-08-08
  • 淺談Vue render函數(shù)在ElementUi中的應用

    淺談Vue render函數(shù)在ElementUi中的應用

    今天小編就為大家分享一篇淺談Vue render函數(shù)在ElementUi中的應用,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-09-09
  • vue用戶長時間不操作退出到登錄頁的兩種實現(xiàn)方式

    vue用戶長時間不操作退出到登錄頁的兩種實現(xiàn)方式

    出于安全考慮,用戶長時間不操作,就回到登錄頁面,讓用戶重新登錄,本文就記錄一下實現(xiàn)這種效果的兩種方式,具有一定的參考價值,感興趣的可以了解一下
    2021-09-09
  • 一文帶你完全掌握Vue自定義指令

    一文帶你完全掌握Vue自定義指令

    作為使用Vue的開發(fā)者,我們對Vue指令一定不陌生,諸如v-model、v-on、等,同時Vue也為開發(fā)者提供了自定義指令的api,熟練的使用自定義指令可以極大的提高了我們編寫代碼的效率,讓我們可以節(jié)省時間開心的摸魚
    2023-03-03
  • vue3實現(xiàn)模擬地圖站點名稱按需顯示的功能(車輛模擬地圖)

    vue3實現(xiàn)模擬地圖站點名稱按需顯示的功能(車輛模擬地圖)

    最近在做車輛模擬地圖,在實現(xiàn)控制站點名稱按需顯示,下面通過本文給大家分享vue3實現(xiàn)模擬地圖站點名稱按需顯示的功能,感興趣的朋友跟隨小編一起看看吧
    2024-06-06
  • vue項目中如何通過cdn引入資源并配置詳解

    vue項目中如何通過cdn引入資源并配置詳解

    生產(chǎn)環(huán)境中將項目依賴的一些第三方包替換成通過cdn方式外部加載,而不是打包到 vender,對于提升應用的加載、響應速度很有意義,下面這篇文章主要給大家介紹了關于vue項目中如何通過cdn引入資源并配置的相關資料,需要的朋友可以參考下
    2022-06-06
  • Vue項目中quill-editor帶樣式編輯器的使用方法

    Vue項目中quill-editor帶樣式編輯器的使用方法

    這篇文章主要介紹了Vue項目中quill-editor帶樣式編輯器的使用方法,可以更改插入圖片和視頻,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-08-08

最新評論

彭水| 盖州市| 宜都市| 屏东市| 大新县| 延寿县| 乡城县| 阳泉市| 壤塘县| 红桥区| 双桥区| 瑞安市| 丹棱县| 金昌市| 成安县| 襄汾县| 阿鲁科尔沁旗| 伽师县| 高雄市| 锦州市| 普兰店市| 绿春县| 肥乡县| 容城县| 库尔勒市| 哈巴河县| 馆陶县| 大埔区| 玛多县| 松潘县| 万年县| 商河县| 西乌| 全南县| 凤城市| 资阳市| 上饶市| 乌拉特中旗| 衡阳市| 南投县| 汤原县|