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 相关文章推荐
jQuery EasyUI API 中文文档 - PropertyGrid属性表格
Nov 18 Javascript
js防止表单重复提交实现代码
Sep 05 Javascript
node.js中的http.response.removeHeader方法使用说明
Dec 14 Javascript
JavaScript阻止浏览器返回按钮的方法
Mar 18 Javascript
js实现带有介绍的Select列表菜单实例
Aug 18 Javascript
AngularJS 自定义指令详解及示例代码
Aug 17 Javascript
js 获取元素所有兄弟节点的实现方法
Sep 06 Javascript
详解windows下vue-cli及webpack 构建网站(三)使用组件
Jun 17 Javascript
js实现方块上下左右移动效果
Aug 17 Javascript
JavaScript设计模式之原型模式分析【ES5与ES6】
Jul 26 Javascript
如何用RxJS实现Redux Form
Dec 29 Javascript
vue通过video.js解决m3u8视频播放格式的方法
Jul 30 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
比特率,大家看看这个就不用收音机音质去比MP3音质了
2021/03/01 无线电
php入门学习知识点二 PHP简单的分页过程与原理
2011/07/14 PHP
php绘制一条直线的方法
2015/01/24 PHP
使用phpstorm和xdebug实现远程调试的方法
2015/12/29 PHP
PHP依赖注入(DI)和控制反转(IoC)详解
2017/06/12 PHP
JavaScript为对象原型prototype添加属性的两种方式
2010/08/01 Javascript
基于Jquery的$.cookie()实现跨越页面tabs导航实现代码
2011/03/03 Javascript
javascript中2个感叹号的用法实例详解
2014/09/04 Javascript
nodejs中操作mysql数据库示例
2014/12/20 NodeJs
理解jquery事件冒泡
2016/01/03 Javascript
javascript中获取class的简单实现
2016/07/12 Javascript
BootStrap入门教程(三)之响应式原理
2016/09/19 Javascript
运用js教你轻松制作html音乐播放器
2020/04/17 Javascript
vue2.0 better-scroll 实现移动端滑动的示例代码
2018/01/25 Javascript
微信小程序自定义弹窗滚动与页面滚动冲突的解决方法
2019/07/16 Javascript
微信小程序使用npm包的方法步骤
2019/08/13 Javascript
解决vue bus.$emit触发第一次$on监听不到问题
2020/07/28 Javascript
python备份文件的脚本
2008/08/11 Python
Python中的探索性数据分析(功能式)
2017/12/22 Python
查看django版本的方法分享
2018/05/14 Python
selenium + python 获取table数据的示例讲解
2018/10/13 Python
python thrift 实现 单端口多服务的过程
2020/06/08 Python
python的pip有什么用
2020/06/17 Python
大学生如何写自荐信
2014/01/08 职场文书
会计顶岗实习心得
2014/01/25 职场文书
自我介绍演讲稿范文
2014/08/21 职场文书
高中运动会广播稿
2014/09/16 职场文书
合作协议书模板2014
2014/09/26 职场文书
辞职信格式模板
2015/02/27 职场文书
2015年医务科工作总结范文
2015/05/26 职场文书
2016读书月活动心得体会
2016/01/14 职场文书
2016年入党心得体会范文
2016/01/23 职场文书
员工安全责任协议书
2016/03/22 职场文书
Golang 如何实现函数的任意类型传参
2021/04/29 Golang
python的列表生成式,生成器和generator对象你了解吗
2022/03/16 Python
CSS 鼠标选中文字后改变背景色的实现代码
2023/05/21 HTML / CSS