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和JS用外部变量获取Ajax返回的参数值的方法实例(超简单)
Jun 17 Javascript
javascript实现多级联动下拉菜单的方法
Feb 06 Javascript
JS实现表单中checkbox对勾选中增加边框显示效果
Aug 21 Javascript
Bootstrap前端开发案例二
Jun 17 Javascript
AngularJS路由实现页面跳转实例
Mar 03 Javascript
详解Vue2 无限级分类(添加,删除,修改)
Mar 07 Javascript
详解在Vue中有条件地使用CSS类
Sep 30 Javascript
微信小程序开发之tabbar图标和颜色的实现
Oct 17 Javascript
JS数组splice操作实例分析
Oct 12 Javascript
Vue filter 过滤当前时间 实现实时更新效果
Dec 20 Javascript
解决VUE项目localhost端口服务器拒绝连接,只能用127.0.0.1的问题
Aug 14 Javascript
vue 监听 Treeselect 选择项的改变操作
Aug 31 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学习笔记 PHP面向对象的程序设计
2011/06/13 PHP
php无限遍历文件夹示例分享
2014/03/04 PHP
在Linux系统下一键重新安装WordPress的脚本示例
2015/06/30 PHP
crontab无法执行php的解决方法
2016/01/25 PHP
Yii2中cookie用法示例分析
2016/07/18 PHP
php计数排序算法的实现代码(附四个实例代码)
2020/03/31 PHP
利用NodeJS的子进程(child_process)调用系统命令的方法分享
2013/06/05 NodeJs
GridView中获取被点击行中的DropDownList和TextBox中的值
2013/07/18 Javascript
输入自动提示搜索提示功能的使用说明:sugggestion.txt
2013/09/02 Javascript
js算法中的排序、数组去重详细概述
2013/10/14 Javascript
JS判断移动端访问设备并加载对应CSS样式
2014/06/13 Javascript
超炫的jquery仿flash导航栏特效
2014/11/11 Javascript
JavaScript实现点击单元格改变背景色的方法
2016/02/12 Javascript
详解BootStrap中Affix控件的使用及保持布局的美观的方法
2016/07/08 Javascript
详解vue事件对象、冒泡、阻止默认行为
2017/03/20 Javascript
在Vue中如何使用Cookie操作实例
2017/07/27 Javascript
Node.JS循环删除非空文件夹及子目录下的所有文件
2018/03/12 Javascript
javascript之分片上传,断点续传的实际项目实现详解
2019/09/05 Javascript
js函数和this用法实例分析
2020/03/13 Javascript
[06:40]2014DOTA2西雅图国际邀请赛 DK战队巡礼
2014/07/07 DOTA
Python THREADING模块中的JOIN()方法深入理解
2015/02/18 Python
python用列表生成式写嵌套循环的方法
2018/11/08 Python
python实现一行输入多个值和一行输出多个值的例子
2019/07/16 Python
python中count函数简单的实例讲解
2020/02/06 Python
浅谈在django中使用filter()(即对QuerySet操作)时踩的坑
2020/03/31 Python
python实现canny边缘检测
2020/09/14 Python
浅析python 字典嵌套
2020/09/29 Python
html5中canvas图表实现柱状图的示例
2017/11/13 HTML / CSS
Jogun Shop中文官网:韩国知名时尚男装网站
2016/10/12 全球购物
交通安全演讲稿
2014/01/07 职场文书
机械工程及其自动化专业求职信
2014/08/08 职场文书
英文升职感谢信
2015/01/23 职场文书
幼儿园圣诞节活动总结
2015/05/06 职场文书
2015毕业设计工作总结
2015/07/24 职场文书
2016年优秀教师先进事迹材料
2016/02/26 职场文书
详解Python自动化之文件自动化处理
2021/06/21 Python