其他分享
首页 > 其他分享> > vue前端验证码

vue前端验证码

作者:互联网

验证码

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

<script>
   export default{
       name:'ValidCode',
       model:{
           prop:'value',
           event:'input'
      },
       props:{
           width:{
               type:String,
               default:'100px'
          },
           height:{
               type:String,
               default:'40px'
          },
           length:{
               type:Number,
               default:4
          },
           refresh:{
               type:Number
          }
      },
       data(){
           return{
              codeList:[]
          }
      },
       watch:{
           refresh(){
               this.createdCode()
          }
      },
       mounted(){
           this.createdCode()
      },
       methods: {
           refreshCode() {
               this.createdCode()
          },
           createdCode() {
               const len = this.length
               const codeList = []
               const chars = 'ABCDEFGHJKMNPQRSTWXYZabcdefghjkmnpqrstwxyz0123456789'
               const charsLen = chars.length
               //生成
               for (let i = 0; i < len; i++) {
                   const 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: `${10 + (+[Math.floor(Math.random() * 10)] + 6)}px`,
                       padding: `${[Math.floor(Math.random() * 10)]}px`,
                       transform: `rotate(${Math.floor(Math.random() * 90) - Math.floor(Math.random() * 90)}deg)`
                  })
              }
               //指向
               this.codeList = codeList
               //将当前数据派发出去
               //console.log(codeList,map(item=>item.code).join(''))
               this.$emit('input', 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>
.ValidCode{
   display:flex;
   justify-content:center;
   align-items:center;
   cursor:pointer;
}
.ValidCode span{
   display: inline-block;
}
</style>

 

标签:vue,const,前端,random,验证码,item,codeList,data,Math
来源: https://www.cnblogs.com/shiyi1/p/16538880.html