基于vue的验证码组件的示例代码


Posted in Javascript onJanuary 22, 2019

最近在自己写页面,模仿思否论坛,然后写登录注册UI的时候需要一个验证码组件. 去搜一下没找到什么合适的,而且大多都是基于后端的,于是自己手写一个。

演示

基于vue的验证码组件的示例代码

分析验证码组件

分析验证码功能

  • 随机出现的数字大小写字母 (基础功能)
  • 不同的数字或者字母有不同的颜色 (功能优化)
  • 不同的数字或者字母有不同的字体大写 (功能优化)
  • 不同的数字或者字母有不同的边距 (功能优化)
  • 不同的数字或者字母有不同的倾斜角度 (功能优化)
  • 更多功能优化...

分析组件功能

  • 可以设置生成验证码的长度 (基本功能)
  • 可以设置验证码组件的宽高 (基本功能)

编写验证码组件

template

最外层div绑定点击事件,点击后刷新验证码。
span是单个验证码的载体,样式动态绑定

<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>

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" :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',
 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>

源码地址

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JQuery写动态树示例代码
Jul 31 Javascript
文本框倒叙输入让输入框的焦点始终在最开始的位置
Sep 01 Javascript
node.js中的fs.writeSync方法使用说明
Dec 15 Javascript
javascript 实现 原路返回
Jan 21 Javascript
jQuery 回调函数(callback)的使用和基础
Feb 26 Javascript
jQuery多级手风琴菜单实例讲解
Oct 22 Javascript
JSON+Jquery省市区三级联动
Jan 13 Javascript
浅析Javascript匿名函数与自执行函数
Feb 06 Javascript
jQuery 实现评论等级好评差评特效
May 06 Javascript
JavaScript实现随机数生成器(去重)
Oct 13 Javascript
JS+HTML5实现获取手机验证码倒计时按钮
Aug 08 Javascript
vue中注册自定义的全局js方法
Nov 15 Javascript
JavaScript中的&quot;=、==、===&quot;区别讲解
Jan 22 #Javascript
深入分析element ScrollBar滚动组件源码
Jan 22 #Javascript
js实现京东秒杀倒计时功能
Jan 21 #Javascript
vue.js的vue-cli脚手架中使用百度地图API的实例
Jan 21 #Javascript
JavaScript使用Math.random()生成简单的验证码
Jan 21 #Javascript
详解一个基于react+webpack的多页面应用配置
Jan 21 #Javascript
js中对象和面向对象与Json介绍
Jan 21 #Javascript
You might like
在PHP中养成7个面向对象的好习惯
2010/07/17 PHP
php弹出对话框实现重定向代码
2014/01/23 PHP
php实现求相对时间函数
2015/06/15 PHP
PHP随手笔记整理之PHP脚本和JAVA连接mysql数据库
2015/11/25 PHP
用js得到网页中所有的div的id
2020/10/19 Javascript
JavaScript 编程引入命名空间的方法与代码
2007/08/13 Javascript
Jquery实现控件的隐藏和显示实例
2014/02/08 Javascript
js插件YprogressBar实现漂亮的进度条效果
2015/04/20 Javascript
js实现文字在按钮上滚动的方法
2015/08/20 Javascript
动态生成的DOM不会触发onclick事件的原因及解决方法
2016/08/06 Javascript
JavaScript组成、引入、输出、运算符基础知识讲解
2016/12/08 Javascript
jQuery实现字符串全部替换的方法
2016/12/12 Javascript
javascript 组合按键事件监听实现代码
2017/02/21 Javascript
解决Vue 浏览器后退无法触发beforeRouteLeave的问题
2017/12/24 Javascript
关于vue v-for 循环问题(一行显示四个,每一行的最右边那个计算属性)
2018/09/04 Javascript
js实现for循环跳过undefined值示例
2019/07/02 Javascript
jQuery实现弹出层效果
2019/12/10 jQuery
基于Element的组件改造的树形选择器(树形下拉框)
2020/02/27 Javascript
React Native登录之指纹登录篇的示例代码
2020/11/03 Javascript
Vant 中的Toast设置全局的延迟时间操作
2020/11/04 Javascript
[51:00]Secret vs VGJ.S 2018国际邀请赛淘汰赛BO3 第一场 8.24
2018/08/25 DOTA
python编写简单爬虫资料汇总
2016/03/22 Python
Python聊天室程序(基础版)
2018/04/01 Python
浅谈flask源码之请求过程
2018/07/26 Python
django+xadmin+djcelery实现后台管理定时任务
2018/08/14 Python
Python中关键字global和nonlocal的区别详解
2018/09/03 Python
python 使用matplotlib 实现从文件中读取x,y坐标的可视化方法
2019/07/04 Python
Python基于进程池实现多进程过程解析
2020/04/30 Python
店长岗位职责
2013/11/21 职场文书
关于安全的演讲稿
2014/05/09 职场文书
张家口市高新区党工委群众路线教育实践活动整改方案
2014/10/25 职场文书
培训师岗位职责
2015/02/14 职场文书
个人业务学习心得体会
2016/01/25 职场文书
Vue实现跑马灯样式文字横向滚动
2021/11/23 Vue.js
一文了解JavaScript用Element Traversal新属性遍历子元素
2021/11/27 Javascript
JavaScript设计模式之原型模式详情
2022/06/21 Javascript