基于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 自定义函数写法分享
Mar 30 Javascript
jQuery数据缓存功能的实现思路及简单模拟
May 27 Javascript
js实现倒计时(距离结束还有)示例代码
Jul 24 Javascript
基于jquery实现的文字淡入淡出效果
Nov 14 Javascript
js获取字符串字节数方法小结
Jun 09 Javascript
webpack2.0配置postcss-loader的方法
Aug 17 Javascript
JavaScript使用math.js进行精确计算操作示例
Jun 19 Javascript
Vue 事件处理操作实例详解
Mar 05 Javascript
小程序调用微信支付的方法
Sep 26 Javascript
js实现课堂随机点名系统
Nov 21 Javascript
JavaScript中使用Spread运算符的八种方法总结
Jun 18 Javascript
vue集成openlayers加载geojson并实现点击弹窗教程
Sep 24 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 文件上传代码(限制jpg文件)
2010/01/05 PHP
PHP setTime 设置当前时间的代码
2012/08/27 PHP
ThinkPHP中公共函数路径和配置项路径的映射分析
2014/11/22 PHP
php数组添加与删除单元的常用函数实例分析
2015/02/16 PHP
PHP基于mssql扩展远程连接MSSQL的简单实现方法
2016/10/08 PHP
PHP经典设计模式之依赖注入定义与用法详解
2019/05/21 PHP
解决Laravel blade模板转义html标签的问题
2019/09/03 PHP
老鱼 浅谈javascript面向对象编程
2010/03/04 Javascript
jquery 打开窗口返回值实现代码
2010/03/04 Javascript
基于javascript滚动图片具体实现
2013/11/18 Javascript
js实现简单鼠标跟随效果的方法
2015/04/10 Javascript
smartcrop.js智能图片裁剪库
2015/10/14 Javascript
第八篇Bootstrap下拉菜单实例代码
2016/06/21 Javascript
Javascript单例模式的介绍和实例
2016/10/08 Javascript
详解a++和++a的区别
2017/08/30 Javascript
用最简单的方法判断JavaScript中this的指向(推荐)
2017/09/04 Javascript
jQuery中 DOM节点操作方法大全
2017/10/12 jQuery
JS中原始值和引用值的储存方式示例详解
2018/03/23 Javascript
python中sleep函数用法实例分析
2015/04/29 Python
Python实现的概率分布运算操作示例
2017/08/14 Python
30秒轻松实现TensorFlow物体检测
2018/03/14 Python
将TensorFlow的模型网络导出为单个文件的方法
2018/04/23 Python
Windows下安装Scrapy
2018/10/17 Python
python针对Oracle常见查询操作实例分析
2020/04/30 Python
python如何输出反斜杠
2020/06/18 Python
CSS3 :default伪类选择器使用简介
2018/03/15 HTML / CSS
女士时装鞋:Chinese Laundry
2018/08/29 全球购物
公司出纳岗位职责
2013/12/07 职场文书
求职个人评价范文
2014/04/09 职场文书
竞选大队长演讲稿
2014/04/29 职场文书
合作意向书
2014/07/30 职场文书
民主评议党员个人自我评价
2015/03/03 职场文书
初中运动会前导词
2015/07/20 职场文书
《司马光》教学反思
2016/02/22 职场文书
Navicat for MySQL的使用教程详解
2021/05/27 MySQL
零基础学java之方法的定义与调用详解
2022/04/10 Java/Android