" />

欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

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]') { // 判斷傳入參數(shù)類型
? ? ? ? for (var i in options) { // 根據傳入的參數(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)
? ? ? ? ? ? /** 設置旋轉角度和坐標原點**/
? ? ? ? ? ? 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
? ? ? ? }
? ? }
}
/** 生成字母數(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.效果圖

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

相關文章

  • vue中緩存組件keep alive的介紹及使用方法

    vue中緩存組件keep alive的介紹及使用方法

    這篇文章主要介紹了vue緩存組件keepalive的相關資料,keep-alive組件是使用 include exclude這兩個屬性傳入組件名稱來確認哪些可以被緩存的,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2022-08-08
  • 詳解vue跨組件通信的幾種方法

    詳解vue跨組件通信的幾種方法

    本篇文章主要介紹了詳解vue跨組件通信的幾種方法 ,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06
  • vue中使用@change的方法

    vue中使用@change的方法

    @change 是 Vue.js 中用于監(jiān)聽表單元素值變化的事件處理器,很多組件有@change事件,那到底如何獲取到當前的參數(shù)呢?本文給大家詳細講解,感興趣的朋友一起看看吧
    2023-11-11
  • 如何利用Vue3+Element?Plus實現(xiàn)動態(tài)標簽頁及右鍵菜單

    如何利用Vue3+Element?Plus實現(xiàn)動態(tài)標簽頁及右鍵菜單

    標簽頁一般配合菜單實現(xiàn),當你點擊一級菜單或者二級菜單時,可以增加對應的標簽頁,當你點擊對應的標簽頁,可以觸發(fā)對應的一級菜單或者二級菜單,下面這篇文章主要給大家介紹了關于如何利用Vue3+Element?Plus實現(xiàn)動態(tài)標簽頁及右鍵菜單的相關資料,需要的朋友可以參考下
    2022-11-11
  • Vue實現(xiàn)微信小程序中預覽文件的縮放功能

    Vue實現(xiàn)微信小程序中預覽文件的縮放功能

    在微信小程序中,默認情況下,文件預覽功能不支持文檔縮放,導致用戶在遇到小字體時難以清晰閱讀,為了解決這一問題并提升用戶體驗,實現(xiàn)文檔的縮放功能至關重要,所以本文
    2024-12-12
  • Vue封裝遠程下拉框組件的實現(xiàn)示例

    Vue封裝遠程下拉框組件的實現(xiàn)示例

    本文主要介紹了Vue封裝遠程下拉框組件的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-07-07
  • elementui?el-table底層背景色修改簡單方法

    elementui?el-table底層背景色修改簡單方法

    最近在做項目的時候遇到個需求,需要修改el-table背景色,這里給大家總結下,這篇文章主要給大家介紹了關于elementui?el-table底層背景色修改的相關資料,需要的朋友可以參考下
    2023-10-10
  • Vue 實現(xiàn)輸入框新增搜索歷史記錄功能

    Vue 實現(xiàn)輸入框新增搜索歷史記錄功能

    這篇文章主要介紹了Vue 輸入框新增搜索歷史記錄功能,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-10-10
  • Vue實現(xiàn)簡單跑馬燈特效

    Vue實現(xiàn)簡單跑馬燈特效

    這篇文章主要為大家詳細介紹了Vue實現(xiàn)簡單跑馬燈特效,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • 解決echarts中橫坐標值顯示不全(自動隱藏)問題

    解決echarts中橫坐標值顯示不全(自動隱藏)問題

    這篇文章主要介紹了解決echarts中橫坐標值顯示不全(自動隱藏)問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07

最新評論