基于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 相关文章推荐
小议javascript 设计模式 推荐
Oct 28 Javascript
javascript实现类似超链接的效果
Dec 26 Javascript
JS实现跟随鼠标闪烁转动色块的方法
Feb 26 Javascript
jQuery实现切换页面过渡动画效果
Oct 29 Javascript
Bootstrap弹出框(modal)垂直居中的问题及解决方案详解
Jun 12 Javascript
JS实现简单的tab切换选项卡效果
Sep 21 Javascript
angularjs中ng-attr的用法详解
Dec 31 Javascript
微信小程序 地图map详解及简单实例
Jan 10 Javascript
使用jQuery的load方法设计动态加载及解决被加载页面js失效问题
Mar 01 Javascript
JavaScript实现简单的四则运算计算器完整实例
Apr 28 Javascript
原生JS实现循环Nodelist Dom列表的4种方式示例
Feb 11 Javascript
node.js 基于 STMP 协议和 EWS 协议发送邮件
Feb 14 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中文字母数字验证码实现代码
2008/04/25 PHP
PHP中simplexml_load_string函数使用说明
2011/01/01 PHP
memcache一致性hash的php实现方法
2015/03/05 PHP
点图片上一页下一页翻页效果
2008/07/09 Javascript
jQuery 位置函数offset,innerWidth,innerHeight,outerWidth,outerHeight,scrollTop,scrollLeft
2010/03/23 Javascript
javascript 小数取整简单实现方式
2014/05/30 Javascript
javascript中createElement的两种创建方式
2015/05/14 Javascript
javascript事件模型介绍
2016/05/31 Javascript
利用Query+bootstrap和js两种方式实现日期选择器
2017/01/10 Javascript
使用Vue.js 和Chart.js制作绚丽多彩的图表
2019/06/15 Javascript
Vue实现回到顶部和底部动画效果
2019/07/31 Javascript
videocapture库制作python视频高速传输程序
2013/12/23 Python
Python使用xlrd模块操作Excel数据导入的方法
2015/05/26 Python
基于Django的python验证码(实例讲解)
2017/10/23 Python
python实现守护进程、守护线程、守护非守护并行
2018/05/05 Python
Python打开文件,将list、numpy数组内容写入txt文件中的方法
2018/10/26 Python
Python中shapefile转换geojson的示例
2019/01/03 Python
Python如何调用JS文件中的函数
2019/08/16 Python
WxPython实现无边框界面
2019/11/18 Python
Python3+selenium实现cookie免密登录的示例代码
2020/03/18 Python
python实现企业微信定时发送文本消息的示例代码
2020/11/24 Python
CSS3中各种颜色属性的使用教程
2016/05/17 HTML / CSS
ProBikeKit新西兰:自行车套件,跑步和铁人三项装备
2017/04/05 全球购物
泰国汽车、火车和轮渡票预订网站:Bus Online Ticket
2017/09/09 全球购物
请说出你所知道的线程同步的方法
2013/04/19 面试题
一年级班主任寄语
2014/01/19 职场文书
迎新晚会主持词
2014/03/24 职场文书
经典的毕业生自荐信范文
2014/04/14 职场文书
财务人员担保书
2014/05/13 职场文书
珠宝的促销活动方案
2014/08/31 职场文书
全国法制宣传日活动总结2014
2014/11/01 职场文书
介绍信的写法
2015/01/31 职场文书
2015年教学工作总结
2015/04/02 职场文书
小学四年级作文之人物作文
2019/11/06 职场文书
用Python的绘图库(matplotlib)绘制小波能量谱
2021/04/17 Python
vue 实现弹窗关闭后刷新效果
2022/04/08 Vue.js