js实现验证码功能


Posted in Javascript onJuly 24, 2020

本文实例为大家分享了js实现验证码功能的具体代码,供大家参考,具体内容如下

#前面是拆解着讲的,不想看可以直接跳过,带注释的完整版代码和效果在后面

首先在页面中准备一个输入框,一个显示验证码的盒子和一个提交按钮

<body>
 <input type="text">
 <div></div>
 <button>提交</button>
</body>

然后加一些样式

input {
 width: 150px;
 height: 30px;
 outline: none;
 font-size: 24px;
 vertical-align: middle;
}

button {
 outline: none;
 vertical-align: middle;
 cursor: pointer;
}

div {
 display: inline-block;
 width: 90px;
 height: 40px;
 line-height: 40px;
 text-align: center;
 vertical-align: middle;
 background-color: #ddd;
 cursor: pointer;
}

然后大概长这样(有点丑,不过无所谓,主要内容是js)

js实现验证码功能

好,那么开始写js

首先获取这些元素

var input = document.querySelector('input');
var btn = document.querySelector('button');
var div = document.querySelector('div');

然后搞一个字符库和一个保存验证码的字符串

var characters = "QWETYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm1234567890";
var str;

那个字符库就直接滚键盘就行了~

因为验证码要多次用到随机数,所以为了方便就先搞一个随机数的函数

function getRandom(l, r) {
 return parseInt(l + Math.random() * (r - l + 1));
}

因为是验证码,所以不能让生成的文本可以直接被选中复制,所以给加一个文本不可选中

div.addEventListener('selectstart', function (e) {
 e.preventDefault();
})

因为验证码不是每次刷新页面就生成一次,看不清是可以换的,要多次生成,所以就把生成验证码的部分写在一个函数里

function run() {
 str = '';
 while (div.hasChildNodes()) {
 div.removeChild(div.firstChild);
 }
 for (var i = 0; i < 4; i++) {
 var span = document.createElement('span');
 span.innerHTML = characters[getRandom(0, characters.length - 1)];
 span.style.display = 'inline-block';
 span.style.fontSize = getRandom(16, 32) + 'px';
 span.style.color = 'rgb(' + getRandom(0, 200) + ',' + getRandom(0, 200) + ',' + getRandom(0, 200) + ')';
 span.style.transform = 'translate(' + getRandom(-5, 5) + 'px, ' + getRandom(-5, 5) + 'px) rotate(' + getRandom(-20, 20) + 'deg)';
 str += span.innerHTML;
 div.appendChild(span);
 }
}

大概说明一下这部分,原理大概就是创建4(我搞的是4位的验证码)个span,然后分别随机设置文本、字体大小、字体颜色、平移旋转啥的,然后把span添加到div里成为div的子节点,然后不要忘了让str变量储存一下验证码的字符

每次生成之前先将上一次生成的验证码删掉(即把div里的所有子节点删除掉),并且把str重置

然后页面刷新的时候生成一次(调用一次),每次点击div的时候重新生成一次(每次点击调用一次)

run();
div.addEventListener('click', run);

再给提交按钮添加点击事件:判断验证输入的验证码对不对,然后刷新验证码,并且自动将输入框中的文本清除

btn.addEventListener('click', function () {
 if (input.value.toLowerCase() == str.toLowerCase()) {
 alert('验证成功');
 } else {
 alert('验证失败');
 }
 run();
 input.value = '';
})

判断验证码这里我为了不区分大小写用了toLowerCase()函数将两个字符串都转化成小写之后再做的比较

至此,功能就都实现的差不多了

看效果:

js实现验证码功能

带注释的完整版代码如下:

<!DOCTYPE html>
<html lang="ch-ZN">

<head>
 <meta charset="UTF-8">
 <meta name="viewport" content="width=device-width, initial-scale=1.0">
 <title>js实现验证码</title>
 <style>
 input {
  width: 150px;
  height: 30px;
  outline: none;
  font-size: 24px;
  vertical-align: middle;
 }

 button {
  outline: none;
  vertical-align: middle;
  cursor: pointer;
 }

 div {
  display: inline-block;
  width: 90px;
  height: 40px;
  line-height: 40px;
  text-align: center;
  vertical-align: middle;
  background-color: #ddd;
  cursor: pointer;
 }
 </style>
</head>

<body>
 <input type="text">
 <div></div>
 <button>提交</button>
 <script>
 // 获取元素
 var input = document.querySelector('input');
 var btn = document.querySelector('button');
 var div = document.querySelector('div');

 // 搞一个字符库
 var characters = "QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm1234567890";
 var str; // str用来储存验证码的文本

 // 生成一个在[l,r]范围内的随机整数的函数
 function getRandom(l, r) {
  return parseInt(l + Math.random() * (r - l + 1));
 }

 // 设置文本不可选中
 div.addEventListener('selectstart', function (e) {
  e.preventDefault();
 })

 // 生成验证码的函数
 function run() {

  // 先重置str
  str = '';

  // 删除掉div中的所有子节点
  while (div.hasChildNodes()) {
  div.removeChild(div.firstChild);
  }

  // 生成由四个字符组成的验证码
  for (var i = 0; i < 4; i++) {

  // 创建一个span对象
  var span = document.createElement('span');

  // 设置文本(从字库中随机抽取一个字符)
  span.innerHTML = characters[getRandom(0, characters.length - 1)];

  // 设置一些随机的样式
  span.style.display = 'inline-block';
  span.style.fontSize = getRandom(16, 32) + 'px';
  span.style.color = 'rgb(' + getRandom(0, 200) + ',' + getRandom(0, 200) + ',' + getRandom(0, 200) + ')';
  span.style.transform = 'translate(' + getRandom(-5, 5) + 'px, ' + getRandom(-5, 5) + 'px) rotate(' + getRandom(-20, 20) + 'deg)';
  str += span.innerHTML; // str记录字符
  div.appendChild(span); // 将span添加到div中
  }
 }


 run(); // 每次打开/刷新页面时先调用一次
 div.addEventListener('click', run); // 每次点击验证码的时候调用一次

 // 提交按钮点击事件
 btn.addEventListener('click', function () {
  if (input.value.toLowerCase() == str.toLowerCase()) {
  alert('验证成功');
  } else {
  alert('验证失败');
  }
  run();
  input.value = '';
 })
 </script>
</body>

</html>

以上

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

Javascript 相关文章推荐
js 中{},[]中括号,大括号使用详解
May 12 Javascript
Javascript base64编码实现代码
Dec 02 Javascript
js图片滚动效果时间可随意设定当鼠标移上去时停止
Jun 26 Javascript
jQuery控制frames及frame页面JS的方法
Mar 08 Javascript
Angular.js 实现数字转换汉字实例代码
Jul 14 Javascript
js实现楼层效果的简单实例
Jul 15 Javascript
AngularJS控制器controller给模型数据赋初始值的方法
Jan 04 Javascript
微信小程序滚动Tab实现左右可滑动切换
Aug 17 Javascript
浅谈Vue2.0中v-for迭代语法的变化(key、index)
Mar 06 Javascript
vue计算属性+vue中class与style绑定(推荐)
Mar 30 Javascript
vue 使用饿了么UI仿写teambition的筛选功能
Mar 01 Vue.js
JS开发前端团队展示控制器来为成员引流
Aug 14 Javascript
解决VUE自定义拖拽指令时 onmouseup 与 click事件冲突问题
Jul 24 #Javascript
深入了解Vue.js 混入(mixins)
Jul 23 #Javascript
JS实现简单移动端鼠标拖拽
Jul 23 #Javascript
JS使用Chrome浏览器实现调试线上代码
Jul 23 #Javascript
JS实现鼠标按下拖拽效果
Jul 23 #Javascript
javascript利用canvas实现鼠标拖拽功能
Jul 23 #Javascript
JS如何实现封装列表右滑动删除收藏按钮
Jul 23 #Javascript
You might like
用PHP将数据导入到Foxmail
2006/10/09 PHP
深入了解php4(2)--重访过去
2006/10/09 PHP
ThinkPHP通过AJAX返回JSON的两种实现方法
2014/12/18 PHP
PHP实现留言板功能的详细代码
2017/03/25 PHP
node.js实现逐行读取文件内容的代码
2014/06/27 Javascript
如何防止JavaScript自动插入分号
2015/11/05 Javascript
JS中split()用法(将字符串按指定符号分割成数组)
2016/10/24 Javascript
AngularJS入门教程之模块化操作用法示例
2016/11/02 Javascript
jQuery模拟实现天猫购物车动画效果实例代码
2017/05/25 jQuery
详解VUE 数组更新
2017/12/16 Javascript
js实现上传并压缩图片效果
2018/01/10 Javascript
解决Jquery下拉框数据动态获取的问题
2018/01/25 jQuery
React 项目迁移 Webpack Babel7的实现
2018/09/12 Javascript
JS实现可切换图片的幻灯切换效果示例
2019/05/24 Javascript
如何进行微信公众号开发的本地调试的方法
2019/06/16 Javascript
Vue实现将数据库中带html标签的内容输出(原始HTML(Raw HTML))
2019/10/28 Javascript
前端开发之便利店收银系统代码
2019/12/27 Javascript
jQuery实现简单三级联动效果
2020/09/05 jQuery
在vant中使用时间选择器和popup弹出层的操作
2020/11/04 Javascript
python爬取个性签名的方法
2018/06/17 Python
python3用PIL把图片转换为RGB图片的实例
2019/07/04 Python
python redis 批量设置过期key过程解析
2019/11/26 Python
python中count函数简单用法
2020/01/05 Python
python实现密码验证合格程序的思路详解
2020/06/01 Python
Python数据可视化实现漏斗图过程图解
2020/07/20 Python
印度婴儿用品在线商店:Firstcry.com
2016/12/05 全球购物
高品质和独特的产品世界:Creations and Collections
2018/01/07 全球购物
Lookfantastic西班牙官网:英国知名美妆购物网站
2018/06/13 全球购物
汽修专业学生自我鉴定
2013/11/16 职场文书
公司副总经理岗位职责
2014/10/01 职场文书
党的群众路线教育实践活动查摆剖析材料
2014/10/10 职场文书
开展批评与自我批评发言材料
2014/10/17 职场文书
个园导游词
2015/02/04 职场文书
网络研修心得体会
2016/01/08 职场文书
Python实现单例模式的5种方法
2021/06/15 Python
Go gRPC进阶教程gRPC转换HTTP
2022/06/16 Golang