中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

基于vue的驗證碼組件的示例代碼

發布時間:2020-10-02 21:36:34 來源:腳本之家 閱讀:231 作者:我在長安長安 欄目:web開發

最近在自己寫頁面,模仿思否論壇,然后寫登錄注冊UI的時候需要一個驗證碼組件. 去搜一下沒找到什么合適的,而且大多都是基于后端的,于是自己手寫一個。

演示

基于vue的驗證碼組件的示例代碼

分析驗證碼組件

分析驗證碼功能

  • 隨機出現的數字大小寫字母 (基礎功能)
  • 不同的數字或者字母有不同的顏色 (功能優化)
  • 不同的數字或者字母有不同的字體大寫 (功能優化)
  • 不同的數字或者字母有不同的邊距 (功能優化)
  • 不同的數字或者字母有不同的傾斜角度 (功能優化)
  • 更多功能優化...

分析組件功能

  • 可以設置生成驗證碼的長度 (基本功能)
  • 可以設置驗證碼組件的寬高 (基本功能)

編寫驗證碼組件

template

最外層div綁定點擊事件,點擊后刷新驗證碼。
span是單個驗證碼的載體,樣式動態綁定

<template>
 <div class="ValidCode disabled-select" : @click="refreshCode">
  <span v-for="(item, index) in codeList" :key="index" :>{{item.code}}</span>
 </div>
</template>

methods

refreshCode 刷新驗證碼的方法
createdCode 生成驗證碼的方法
getStyle 為每個元素生成動態的樣式

 methods: {
  refreshCode () {
   this.createdCode()
  },
  createdCode () {
   let len = this.length,
    codeList = [],
    chars = 'ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz0123456789',
    charsLen = chars.length
   // 生成
   for (let i = 0; i < len; i++) {
    let rgb = [Math.round(Math.random() * 220), Math.round(Math.random() * 240), Math.round(Math.random() * 200)]
    codeList.push({
     code: chars.charAt(Math.floor(Math.random() * charsLen)), // 隨機碼
     color: `rgb(${rgb})`, // 隨機顏色
     fontSize: `1${[Math.floor(Math.random() * 10)]}px`, // 隨機字號
     padding: `${[Math.floor(Math.random() * 10)]}px`, // 隨機內邊距
     transform: `rotate(${Math.floor(Math.random() * 90) - Math.floor(Math.random() * 90)}deg)` // 隨機旋轉角度
    })
   }
   // 指向
   this.codeList = codeList
   // 將當前數據派發出去
   this.$emit('update:value', codeList.map(item => item.code).join(''))
  },
  // 動態綁定樣式
  getStyle (data) {
   return `color: ${data.color}; font-size: ${data.fontSize}; padding: ${data.padding}; transform: ${data.transform}`
  }
 }

完整代碼

使用

<valid-code :value.sync="validCode"></valid-code>

組件

<template>
 <div class="ValidCode disabled-select" : @click="refreshCode">
  <span v-for="(item, index) in codeList" :key="index" :>{{item.code}}</span>
 </div>
</template>

<script>
export default {
 name: 'validCode',
 props: {
  width: {
   type: String,
   default: '100px'
  },
  height: {
   type: String,
   default: '40px'
  },
  length: {
   type: Number,
   default: 4
  }
 },
 data () {
  return {
   codeList: []
  }
 },
 mounted () {
  this.createdCode()
 },
 methods: {
  refreshCode () {
   this.createdCode()
  },
  createdCode () {
   let len = this.length,
    codeList = [],
    chars = 'ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz0123456789',
    charsLen = chars.length
   // 生成
   for (let i = 0; i < len; i++) {
    let rgb = [Math.round(Math.random() * 220), Math.round(Math.random() * 240), Math.round(Math.random() * 200)]
    codeList.push({
     code: chars.charAt(Math.floor(Math.random() * charsLen)),
     color: `rgb(${rgb})`,
     fontSize: `1${[Math.floor(Math.random() * 10)]}px`,
     padding: `${[Math.floor(Math.random() * 10)]}px`,
     transform: `rotate(${Math.floor(Math.random() * 90) - Math.floor(Math.random() * 90)}deg)`
    })
   }
   // 指向
   this.codeList = codeList
   // 將當前數據派發出去
   this.$emit('update:value', codeList.map(item => item.code).join(''))
  },
  getStyle (data) {
   return `color: ${data.color}; font-size: ${data.fontSize}; padding: ${data.padding}; transform: ${data.transform}`
  }
 }
}
</script>

<style scoped lang="scss">
 .ValidCode{
  display: flex;
  justify-content: center;
  align-items: center;
  cursor: pointer;
  span{
   display: inline-block;
  }
 }
</style>

源碼地址

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

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

汉川市| 富川| 红桥区| 凌海市| 万山特区| 宝应县| 蓝山县| 元江| 庄浪县| 沙湾县| 新乐市| 滦南县| 怀来县| 大理市| 高要市| 南漳县| 交城县| 兰州市| 荥经县| 黄浦区| 五家渠市| 靖安县| 闻喜县| 越西县| 峡江县| 台山市| 剑川县| 镇雄县| 平安县| 裕民县| 湘西| 柏乡县| 杭州市| 大余县| 霍邱县| 清新县| 洪泽县| 巴林右旗| 抚松县| 漳平市| 鄂托克前旗|