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

Vue 實現登錄界面驗證碼功能

 更新時間:2020年01月03日 10:45:50   作者:我愛喝稀飯  
本文通過實例代碼給大家介紹了Vue 實現登錄界面 驗證碼功能,代碼簡單易懂,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下

登錄界面

SIdentify

創(chuàng)建驗證碼組件,實現繪畫出圖片驗證碼

<template>
 <div class="s-canvas">
 <canvas id="s-canvas" :width="contentWidth" :height="contentHeight"></canvas>
 </div>
</template>
<script>
 export default {
 name: 'SIdentify',
 props: {
 identifyCode: {
 type: String,
 default: '1234'
 },
 fontSizeMin: {
 type: Number,
 default: 25
 },
 fontSizeMax: {
 type: Number,
 default: 30
 },
 backgroundColorMin: {
 type: Number,
 default: 255
 },
 backgroundColorMax: {
 type: Number,
 default: 255
 },
 colorMin: {
 type: Number,
 default: 0
 },
 colorMax: {
 type: Number,
 default: 160
 },
 lineColorMin: {
 type: Number,
 default: 100
 },
 lineColorMax: {
 type: Number,
 default: 255
 },
 dotColorMin: {
 type: Number,
 default: 0
 },
 dotColorMax: {
 type: Number,
 default: 255
 },
 contentWidth: {
 type: Number,
 default: 112
 },
 contentHeight: {
 type: Number,
 default: 31
 }
 },
 methods: {
 // 生成一個隨機數
 randomNum(min, max) {
 return Math.floor(Math.random() * (max - min) + min)
 },
 // 生成一個隨機的顏色
 randomColor(min, max) {
 let r = this.randomNum(min, max)
 let g = this.randomNum(min, max)
 let b = this.randomNum(min, max)
 return 'rgb(' + r + ',' + g + ',' + b + ')'
 },
 drawPic() {
 let canvas = document.getElementById('s-canvas')
 let ctx = canvas.getContext('2d')
 ctx.textBaseline = 'bottom'
 // 繪制背景
 ctx.fillStyle = this.randomColor(this.backgroundColorMin, this.backgroundColorMax)
 ctx.fillRect(0, 0, this.contentWidth, this.contentHeight)
 // 繪制文字
 for (let i = 0; i < this.identifyCode.length; i++) {
  this.drawText(ctx, this.identifyCode[i], i)
 }
 this.drawLine(ctx)
 this.drawDot(ctx)
 },
 drawText(ctx, txt, i) {
 ctx.fillStyle = this.randomColor(this.colorMin, this.colorMax)
 ctx.font = this.randomNum(this.fontSizeMin, this.fontSizeMax) + 'px SimHei'
 let x = (i + 1) * (this.contentWidth / (this.identifyCode.length + 1))
 let y = this.randomNum(this.fontSizeMax, this.contentHeight - 5)
 var deg = this.randomNum(-45, 45)
 // 修改坐標原點和旋轉角度
 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)
 },
 drawLine(ctx) {
 // 繪制干擾線
 for (let i = 0; i < 5; i++) {
  ctx.strokeStyle = this.randomColor(this.lineColorMin, this.lineColorMax)
  ctx.beginPath()
  ctx.moveTo(this.randomNum(0, this.contentWidth), this.randomNum(0, this.contentHeight))
  ctx.lineTo(this.randomNum(0, this.contentWidth), this.randomNum(0, this.contentHeight))
  ctx.stroke()
 }
 },
 drawDot(ctx) {
 // 繪制干擾點
 for (let i = 0; i < 80; i++) {
  ctx.fillStyle = this.randomColor(0, 255)
  ctx.beginPath()
  ctx.arc(this.randomNum(0, this.contentWidth), this.randomNum(0, this.contentHeight), 1, 0, 2 * Math.PI)
  ctx.fill()
 }
 }
 },
 watch: {
 identifyCode() {
 this.drawPic()
 }
 },
 mounted() {
 this.drawPic()
 }
 }
</script>
<style scoped>
 .s-canvas {
 height: 38px;

 }
 .s-canvas canvas{
 margin-top: 1px;
 margin-left: 8px;
 }
</style>

在登錄界面引入驗證碼組件并注冊

 import SIdentify from '@/components/common/SIdentify'
 components: { SIdentify },

登錄的form

 <el-form :model="ruleForm" :rules="rules" ref="ruleForm" label-width="0px" class="demo-ruleForm">
 <el-form-item prop="username">
  <el-input v-model="ruleForm.username" placeholder="賬號">
  <i slot="prepend" class="el-icon-s-custom"/>
  </el-input>
 </el-form-item>
 <el-form-item prop="password">
  <el-input type="password" placeholder="密碼" v-model="ruleForm.password">
  <i slot="prepend" class="el-icon-lock"/>
  </el-input>
 </el-form-item>
 <el-form-item prop="code">
  <el-row :span="24">
  <el-col :span="12">
  <el-input v-model="ruleForm.code" auto-complete="off" placeholder="請輸入驗證碼" size=""
   @keyup.enter.native="submitForm('ruleForm')"></el-input>
  </el-col>
  <el-col :span="12">
  <div class="login-code" @click="refreshCode">
  <!--驗證碼組件-->
  <s-identify :identifyCode="identifyCode"></s-identify>
  </div>
  </el-col>
  </el-row>
 </el-form-item>
 <el-form-item>
  <div class="login-btn">
  <el-button type="primary" @click="submitForm()">登錄</el-button>
  </div>
 </el-form-item>
 <p style="font-size:12px;line-height:30px;color:#eaeaea;">Tips : 請輸入賬號密碼登陸</p>
 </el-form>

點擊刷新驗證碼

 randomNum (min, max) {
 return Math.floor(Math.random() * (max - min) + min)
 },
 refreshCode () {
 this.identifyCode = ''
 this.makeCode(this.identifyCodes, 4)
 },
 makeCode (o, l) {
 for (let i = 0; i < l; i++) {
 this.identifyCode += this.identifyCodes[
  this.randomNum(0, this.identifyCodes.length)
 ]
 }
 }

總結

以上所述是小編給大家介紹的Vue 實現登錄界面驗證碼功能,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網站的支持!
如果你覺得本文對你有幫助,歡迎轉載,煩請注明出處,謝謝!

相關文章

  • vue實現三級導航展示和隱藏

    vue實現三級導航展示和隱藏

    這篇文章主要為大家詳細介紹了vue實現三級導航展示和隱藏,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • Vue+tracking.js 實現前端人臉檢測功能

    Vue+tracking.js 實現前端人臉檢測功能

    這篇文章主要介紹了Vue+tracking.js 實現前端人臉檢測功能,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-04-04
  • vuex入門最詳細整理

    vuex入門最詳細整理

    在本篇文章里小編給大家分享的是關于vuex入門最詳細整理的相關內容,需要的朋友們參考下。
    2020-03-03
  • vue 使用monaco實現代碼高亮

    vue 使用monaco實現代碼高亮

    這篇文章主要介紹了vue 使用monaco實現代碼高亮的方法,幫助大家更好的理解和學習使用vue框架,感興趣的朋友可以了解下
    2021-03-03
  • Vue2.5 結合 Element UI 之 Table 和 Pagination 組件實現分頁功能

    Vue2.5 結合 Element UI 之 Table 和 Pagination 組件實現分頁功能

    這篇文章主要介紹了Vue2.5 結合 Element UI 之 Table 和 Pagination 組件實現分頁功能,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2018-01-01
  • Vue實現登錄功能全套超詳細講解(含封裝axios)

    Vue實現登錄功能全套超詳細講解(含封裝axios)

    這篇文章主要給大家介紹了關于Vue實現登錄功能(含封裝axios)的相關資料,Vue是現在前端最流行的框架之一,作為前端開發(fā)人員應該要熟練的掌握它,需要的朋友可以參考下
    2023-10-10
  • 使用VUE和webrtc-streamer實現實時視頻播放(監(jiān)控設備-rtsp)

    使用VUE和webrtc-streamer實現實時視頻播放(監(jiān)控設備-rtsp)

    WebRTC-streamer是一項使用簡單機制通過WebRTC流式傳輸視頻捕獲設備和RTSP源的實驗,下面這篇文章主要給大家介紹了關于如何使用VUE和webrtc-streamer實現實時視頻播放(監(jiān)控設備-rtsp)的相關資料,需要的朋友可以參考下
    2022-11-11
  • vuejs+element UI table表格中實現禁用部分復選框的方法

    vuejs+element UI table表格中實現禁用部分復選框的方法

    今天小編就為大家分享一篇vuejs+element UI table表格中實現禁用部分復選框的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-09-09
  • vue中如何使用jest單元測試

    vue中如何使用jest單元測試

    這篇文章主要介紹了vue中如何使用jest單元測試,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • vue mounted 調用兩次的完美解決辦法

    vue mounted 調用兩次的完美解決辦法

    在開發(fā)中發(fā)現其中一個頁面moutned調用了兩次,而其他頁面正常,表示很懵逼,然后查找原因,終于找到了,其實歸根到底是要知道m(xù)ounted的調用機制問題。這篇文章主要介紹了vue mounted 調用兩次的解決辦法,需要的朋友可以參考下
    2018-10-10

最新評論