~~~
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0">
<title>珠峰培训 - 微信:18310612838</title>
<!-- IMPORT CSS -->
<style>
* {
margin: 0;
padding: 0;
user-select: none;
}
.codeBox {
box-sizing: border-box;
margin: 20px;
width: 100px;
height: 40px;
line-height: 40px;
text-align: center;
border: 1px solid lightcoral;
cursor: pointer;
font-size: 20px;
letter-spacing: 5px;
}
</style>
</head>
<body>
<!-- <div class="codeBox" id="codeBox"></div> -->
<!-- IMPORT JS -->
<script>
/*
* 思路:一加载页面,就生成四位验证码,放置到CODEBOX盒子中;当我们点击CODEBOX盒子的时候,需要重新生成四位验证码,放置到盒子中!
* 四位验证码规则:随机获取数字+字母(大小写)四位即可
*/
// let codeBox = document.getElementById('codeBox');
/* 创建验证码,并把其放在CODEBOX盒子中 */
/* function createCode() {
let area = '0123456789QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm',
codeText = '';
for (let i = 1; i <= 4; i++) {
let ran = Math.round(Math.random() * (61 - 0) + 0),
char = area.charAt(ran);
codeText += char;
}
codeBox.innerHTML = codeText;
} */
// 加载页面就执行一次
// createCode();
// 点击CODEBOX盒子重新生成(此处函数后面不能加小括号,因为我们不是立即把函数执行,而是想让点击的时候才执行)
// codeBox.onclick = createCode;
/* // 验证码的取值范围(索引范围:0~61)
let area = '0123456789QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm';
// 随机获取四个(Math.random()):随机获取四个0~61之间的索引值,基于这个值到AREA范围中取四个字符,拼成我们需要的四位验证码即可
let codeText = '';
for (let i = 1; i <= 4; i++) {
// 每一次循环获取一个随机的索引
let ran = Math.round(Math.random() * (61 - 0) + 0);
// 基于索引获取对应的字符
let char = area.charAt(ran);
// 拼接到结果中
codeText += char;
}
console.log(codeText); */
</script>
<script>
(function () {
let area = '0123456789QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm';
let codeText = '';
// 当前需求下,到底循环多少次就已经不再是准确的了
/* for (let i = 1; i <= 4;) {
let ran = Math.round(Math.random() * (61 - 0) + 0);
let char = area.charAt(ran);
// 拼接之前,首先判断获取的字符CHAR在原始字符串中是否已经存在,不存在我们在拼接进来看,只要存在就不去拼接(大小写字母一样也算重复 =>不论你现在是大写还是小写,反正我们都是转换为大写,然后判断存不存在的)
if (!codeText.toUpperCase().includes(char.toUpperCase())) {
codeText += char;
i++;
}
} */
// 对于不确定具体循环次数的循环,我们一般用while循环
// while(条件){ } 只要条件成立就会一直循环
while (codeText.length < 4) {
let ran = Math.round(Math.random() * (61 - 0) + 0),
char = area.charAt(ran);
if (!codeText.toUpperCase().includes(char.toUpperCase())) {
codeText += char;
}
}
console.log(codeText);
})();
</script>
</body>
</html>
~~~
- 0001.开课说明
- 0002.ECMAScript的发展历程
- 0003.WEB2.0时代-服务器端渲染,前后端不分离
- 0004.WEB2.0时代-前后端分离模式
- 0005.大前端时代概述
- 0006.前端需要的技术栈和学习技巧
- 0007.浏览器
- 0008.JS的三部分组成
- 0009.JS中创建变量的6种形式
- 0010.JS中变量的命名规范
- 0011.JS中的数据类型分类
- 0012.JS中常用的几种输出方式
- 0013.number属性类型详细解读1
- 0014.number数据类型详细解读2
- 0015.string数据类型详细解读1
- 0016.string数据类型详细解读2
- 0017.boolean数据类型详细解读
- 0018.object数据类型详细解读1
- 0019.object数据类型详细解读2
- 0020.谈谈学习
- 0021.数据类型检测
- 0022.浏览器底层渲染机制(堆栈内存和数据类型区别)
- 0023.关于数据类型区别的面试题
- 0024.课后作业讲解:数据类型转换
- 0025.课后作业讲解:堆栈内存处理
- 0026.课后作业讲解:阿里的一道经典面试题
- 0027.JS中三种常用的判断语句
- 0028.小实战:开关灯特效
- 0029.FOR循环和FOR IN循环
- 0030.课后作业讲解:关于循环判断和数据转化
- 0031.课后作业讲解:关于DOM对象的深入理解
- 0032.关于元素集合的相关操作(奇偶行变色)
- 0033.课后作业讲解:逻辑思维判断题
- reset.min.css
- 0034.(复习)前四天内容的综合复习梳理
- 0035.初窥函数:函数的作用、语法、形参
- 0036-0038.选项卡案例
- 0039.隔行变色案例:进一步强化自定义属性编程思想
- 0040.其它作业题的讲解(自定义属性强化)
- 0041.函数创建和执行的堆栈运行机制
- 0042.函数中的形参和实参
- 0043.函数中的实参集合ARGUMENTS
- 0044.函数中的返回值RETURN
- 0045.箭头函数和匿名函数
- 0046.两个等于比较时候的数据类型转换规则
- 0047.数组的基础结构和常规操作
- 0048.数组常用方法:增删改的五个方法
- 0049.数组常用方法:查询、拼接、转换为字符串
- 0050.数组常用方法:检测是否包含、排序和迭代
- 0051.数组去重:双FOR循环(数组塌陷和SPLICE删除优化)
- 0052.数组去重:对象键值对方式(ES6中SET)
- 0053.Math数学函数对象中常用的方法
- 0054.String字符串中常用的方法
- 0055.实战案例:时间字符串格式化
- 0056.实战案例:queryURLParams1
- 0057.实战案例:queryURLParams2
- 0058.实战案例:获取四位不重复的验证码
- 0059.阶段作业题讲解1(基础知识)
- 0060.阶段作业题讲解2(实战案例)
- 0061-0062.DOM操作中相关知识的复习
- 0063.DOM中的节点操作1
- 0064.DOM中的节点操作2
- utils
- 65.关于DOM的增删改