基于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 相关文章推荐
CSS+Jquery实现页面圆角框方法大全
Dec 24 Javascript
js取得url地址参数实例
Feb 22 Javascript
jQuery - css() 方法示例详解
Jan 16 Javascript
js浏览器本地存储store.js介绍及应用
May 13 Javascript
实例解析jQuery中proxy()函数的用法
May 24 Javascript
JavaScript知识点总结(十一)之js中的Object类详解
May 31 Javascript
省市选择的简单实现(基于zepto.js)
Jun 21 Javascript
js滚轮事件兼容性问题需要注意哪些
Nov 15 Javascript
javaScript语法总结
Nov 25 Javascript
JS简单实现点击按钮或文字显示遮罩层的方法
Apr 27 Javascript
微信小程序如何使用canvas二维码保存至手机相册
Jul 15 Javascript
基于 vue-skeleton-webpack-plugin 的骨架屏实战
Aug 05 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制作图型计数器的例子
2006/10/09 PHP
实战mysql导出中文乱码及phpmyadmin导入中文乱码的解决方法
2010/06/11 PHP
用穿越火线快速入门php面向对象
2012/02/22 PHP
PHP读取大文件末尾N行的高效方法推荐
2016/06/03 PHP
YII视图整合kindeditor扩展的方法
2016/07/13 PHP
php实现查询功能(数据访问)
2017/05/23 PHP
PHP利用缓存处理用户注册时的邮箱验证,成功后用户数据存入数据库操作示例
2019/12/31 PHP
利用js对象弹出一个层
2008/03/26 Javascript
JavaScript 设计模式学习 Factory
2009/07/29 Javascript
使用javascript过滤html的字符串(注释标记法)
2013/07/08 Javascript
js函数返回多个返回值的示例代码
2013/11/05 Javascript
jQuery异步获取json数据方法汇总
2014/12/22 Javascript
JS更改select内option属性的方法
2015/10/14 Javascript
AngularJS在IE8的不支持的解决方法
2016/05/13 Javascript
JS生成不重复的随机数组的简单实例
2016/07/10 Javascript
jQuery fadeOut 异步实例代码详解
2016/08/18 Javascript
JQuery 又谈ajax局部刷新
2017/11/27 jQuery
详解webpack 入门与解析
2018/04/09 Javascript
初探Vue3.0 中的一大亮点Proxy的使用
2018/12/06 Javascript
原生js通过一行代码实现简易轮播图
2019/06/05 Javascript
Webpack设置环境变量的一些误区详解
2019/12/19 Javascript
vue 实现在同一界面实现组件的动态添加和删除功能
2020/06/16 Javascript
处理JavaScript值为undefined的7个小技巧
2020/07/28 Javascript
JavaScript实现H5接金币功能(实例代码)
2021/02/22 Javascript
[27:28]Ti4 冒泡赛第二天 iG vs NEWBEE 1
2014/07/15 DOTA
Python中使用glob和rmtree删除目录子目录及所有文件的例子
2014/11/21 Python
python实现按关键字筛选日志文件
2019/12/24 Python
Python函数必须先定义,后调用说明(函数调用函数例外)
2020/06/02 Python
python多线程和多进程关系详解
2020/12/14 Python
猫咪家具:CatsPlay
2018/11/03 全球购物
美国沃尔玛网上超市:Walmart
2020/08/14 全球购物
家长给小学生的评语
2014/01/30 职场文书
工厂会计员职责
2014/02/06 职场文书
优秀大学生职业生涯规划书
2014/02/27 职场文书
商学院大学生求职的自我评价
2014/03/12 职场文书
2015关于重阳节的演讲稿
2015/03/20 职场文书