基于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 相关文章推荐
Highslide.js是一款基于js实现的网页中图片展示插件
Mar 30 Javascript
使用js获取地址栏中传递的值
Jul 02 Javascript
jquery 提示信息显示后自动消失的具体实现
Dec 18 Javascript
JavaScript中的变量定义与储存介绍
Dec 31 Javascript
JavaScript判断数组重复内容的两种方法(推荐)
Jun 06 Javascript
Angularjs使用directive自定义指令实现attribute继承的方法详解
Aug 05 Javascript
在 Angular-cli 中使用 simple-mock 实现前端开发 API Mock 接口数据模拟功能的方法
Nov 28 Javascript
vue+vant-UI框架实现购物车的复选框全选和反选功能
Nov 05 Javascript
javascript实现弹出层效果
Dec 10 Javascript
JS面向对象编程实现的Tab选项卡案例详解
Mar 03 Javascript
Vue通过Blob对象实现导出Excel功能示例代码
Jul 31 Javascript
iview实现动态表单和自定义验证时间段重叠
Jan 10 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
什么是MVC,好东西啊
2007/05/03 PHP
VB中的RasEnumConnections函数返回632错误解决方法
2014/07/29 PHP
基于php的微信公众平台开发入门实例
2015/04/15 PHP
php示例详解Constructor Prototype Pattern 原型模式
2015/10/15 PHP
深入解析WordPress中加载模板的get_template_part函数
2016/01/11 PHP
PHP代码维护,重构变困难的4种原因分析
2016/01/25 PHP
php实现快速对二维数组某一列进行组装的方法小结
2019/12/04 PHP
Prototype 工具函数 学习
2009/07/23 Javascript
javascript XMLHttpRequest对象全面剖析
2010/04/24 Javascript
php+js实现倒计时功能
2014/06/02 Javascript
get(0).tagName获得作用标签示例代码
2014/10/08 Javascript
推荐5 个常用的JavaScript调试技巧
2015/01/08 Javascript
Angularjs全局变量被作用域监听的正确姿势
2016/02/06 Javascript
AngularJS包括详解及示例代码
2016/08/17 Javascript
Angular ng-repeat 对象和数组遍历实例
2016/09/14 Javascript
利用jQuery来动态为属性添加或者删除属性的简单方法
2016/12/02 Javascript
微信小程序 动态的设置图片的高度和宽度详解及实例代码
2017/02/24 Javascript
js仿淘宝商品放大预览功能
2017/03/15 Javascript
javaScript 逻辑运算符使用技巧整理
2017/05/03 Javascript
dropload.js插件下拉刷新和上拉加载使用详解
2017/10/20 Javascript
mui back 返回刷新页面的实例
2017/12/06 Javascript
为vue-router懒加载时下载js的过程中添加loading提示避免无响应问题
2018/04/03 Javascript
JS数组方法shift()、unshift()用法实例分析
2020/01/18 Javascript
JavaScript设计模式--简单工厂模式实例分析【XHR工厂案例】
2020/05/23 Javascript
python多进程控制学习小结
2018/10/31 Python
浅谈python requests 的put, post 请求参数的问题
2019/01/02 Python
Python+OpenCV采集本地摄像头的视频
2019/04/25 Python
在macOS上搭建python环境的实现方法
2019/08/13 Python
Python控制台输出时刷新当前行内容而不是输出新行的实现
2020/02/21 Python
Python脚本破解压缩文件口令实例教程(zipfile)
2020/06/14 Python
Pycharm plot独立窗口显示的操作
2020/12/11 Python
HTML5 progress和meter控件_动力节点Java学院整理
2017/07/06 HTML / CSS
档案信息化建设方案
2014/05/16 职场文书
黄石寨导游词
2015/02/05 职场文书
酒桌上的祝酒词
2015/08/12 职场文书
中学语文教学反思
2016/02/16 职场文书