1.仿京东显示隐藏密码明文
(1) 想要实现的效果:点击眼睛就显示密码,再点击则隐藏
(2)算法:
a. 核心思路:点击眼睛按钮,把框类型由password改为text。
b. 一个按钮两个状态。点击一次则切换为文本框,继续点击则换为密码框。
c. 利用一个flag变量,通过判断flag的值:1,则切换为文本框,并将flag设置为0,如果为0则切换为密码框,flag设置为1。(一定要在最后重置flag否则点击后框的状态不变。)
(3)布局思路:
HTML和CSS部分:首先放置一个box大盒子,然后盒子中放置一个input表单用来放置密码,并且表单元素中放置一个label来放置眼睛图片。CSS样式进行调整时,大盒子box的边框去除,只留下border-bottom,里面的input的ouline设置为none,并且对小眼睛进行CSS调整,注意会使用到子绝父相。
JS部分:
两步:1.获取元素:看有哪些元素需要用到,可以用querySelector和getElementById等获取
2.注册事件:点击后图片改变,点击后框的类型改变。注意要使用到flag算法小技巧。
(3)代码展示:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
.box {
position: relative;
width: 400px;
border-bottom: 1px solid #ccc;
margin: 100px auto;
}
.box input {
width: 370px;
height: 30px;
border: 0;
outline: none;
}
.box img {
position: absolute;
top: 2px;
right: 2px;
width: 24px;
}
</style>
</head>
<body>
<div class="box">
<label for="">
<img src="images/关闭显示.png" alt="" id="eye">
</label>
<!-- 用label来放置小眼睛的图标 -->
<input type="password" name="" id="pwd">
</div>
<script>
//1.获取元素
var eye = document.getElementById('eye');
var pwd = document.getElementById('pwd');
//2.注册事件 处理程序
var flag = 0;
eye.onclick = function(){
if(flag == 0){
pwd.type = 'text';
eye.src = 'images/显示.png';
flag = 1;
}else{
pwd.type = 'password';
eye.src = 'images/关闭显示.png';
flag = 0;
}
}
</script>
</body>
</html>
2.隐藏淘宝二维码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
.box {
position: relative;
width: 74px;
height: 88px;
border: 1px solid #ccc;
margin: 100px auto;
font-size: 12px;
text-align: center;
color: #f40;
display: block;
}
.box img {
width: 60px;
margin-top: 5px;
}
.close-btn {
position: absolute;
top: -1px;
left: -16px;
width: 14px;
height: 14px;
border: 1px solid #ccc;
line-height: 14px;
font-family: Arial, Helvetica, sans-serif;
cursor:pointer;
}
</style>
</head>
<body>
<div class="box">
淘宝二维码
<img src="images/淘宝二维码.png" alt="">
<i class="close-btn">x</i>
</div>
<script>
var btn = document.querySelector('.close-btn');
var box = document.querySelector('.box');
btn.onclick = function(){
box.style.display = 'none';
}
</script>
</body>
</html>
3. 循环精灵图
4.显示隐藏文本框内容
算法:主要使用到onblur失焦和onfocus聚焦两个操作
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
input {
color: #999;
}
</style>
</head>
<body>
<input type="text" value="手机">
<script>
//失去焦点
//获得焦点
//1.获得元素
var text = document.querySelector('input');
//2.注册事件,获取焦点
text.onfocus = function(){
// console.log('得到了焦点');
if(this.value == '手机'){
this.value = ' ';
}
this.style.color = '#333';
}
//3.注册事件 失去焦点 onblur
text.onblur = function(){
// console.log('失去了焦点');
if(this.value === ' '){
this.value = '手机';
}
this.style.color = '#999';
}
</script>
</body>
</html>
5.密码框验证信息
算法:
1.首先判断事件是失去焦点onblur
2.如果输入正确则提示正确的信息,颜色为绿色小图标变化
3.如果输入不是6-16位,则提示错误信息,颜色为红色小图标变化
4.因为样式较多,我们就采取className进行样式修改
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
div {
width: 600px;
margin: 100px auto;
}
.message {
display: inline-block;
font-size: 12px;
color: #999;
background: url(images/check.png) no-repeat left center;
padding-left: 20px;
}
.wrong {
color: red;
background-image: url(images/close.png);
}
</style>
</head>
<body>
<div class="register">
<input type="password" class="ipt">
<p class="message">请输入6~16位密码</p>
</div>
<script>
var ipt = document.querySelector('.ipt');
var message = document.querySelector('.message');
ipt.onblur = function(){
if(this.value.length < 6 || this.value.length > 16 ){
// console.log('错误');
message.className = 'message wrong';
message.innerHTML = '您输入的位数不正确!';
}else{
message.className = 'message right';
message.innerHTML = '输入正确!';
}
}
</script>
</body>
</html>