十五.作业案例
- 自定义多选框
需求:
- 当鼠标点击要选择的选项框,即勾选上,也可以取消;
- 点击全选按钮,全部勾选上;
- 点击反选按钮,取消已勾选的;
<!DOCTYPE html>
<html lang="zh-cn">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
*{margin:0;padding:0;font-family:"Microsoft Yahei";
user-select: none;
}
#wrap{
width: 300px;
padding: 15px 0;
border: 1px solid #999;
border-radius: 10px;
margin: 50px auto;
}
#wrap ul li{
list-style: none;
width: 100%;
height: 50px;
line-height: 50px;
color: #fff;
font-size: 14px;
text-indent: 80px;
cursor: pointer;
background: url("./img/ckbg1.jpg") no-repeat 20px center;
}
#wrap ul li.checked{
background-image: url("./img/ckbg2.jpg");
text-indent: 55px;
}
#wrap ul li:nth-child(4n+1){
background-color: #000;
}
#wrap ul li:nth-child(4n+2){
background-color: #333;
}
#wrap ul li:nth-child(4n+3){
background-color: #666;
}
#wrap ul li:nth-child(4n+4){
background-color: #999;
}
#wrap .btn{
height: 50px;
line-height: 50px;
}
#wrap .btn .all,#wrap .btn .reverse{
float: left;
cursor: pointer;
}
#wrap .btn .all{
text-indent: 65px;
background: url("./img/ckbg1.jpg") no-repeat 35px center;
}
#wrap .btn .all.checked{
background-image: url("./img/ckbg2.jpg");
}
#wrap .btn .reverse{
margin-left: 80px;
}
</style>
</head>
<body>
<div id="wrap">
<ul>
<li>薄荷</li>
<li>皮卡</li>
<li>bohe</li>
<li>mint</li>
<li>pika</li>
<li>志远</li>
<li>小希</li>
<li>伟哥</li>
</ul>
<div class="btn">
<div class="all">全选</div>
<div class="reverse">反选</div>
</div>
</div>
<script>
//每一个功能用一个单独的作用域包装起来
(function(){
let aLi = document.querySelectorAll("#wrap ul li"),
oAll = document.querySelector("#wrap .btn .all"),
oReverse = document.querySelector("#wrap .btn .reverse"),
len = aLi.length,
num = 0
;
//检测当前计数器,以决定oAll是否要加名字
function allName(){
if (num === len){
oAll.classList.add("checked");
}else{
oAll.classList.remove("checked");
}
}
//li的点击事件
for (let i=0;i<len;i++){
aLi[i].onclick = function(){
//操作自己的名字
this.classList.toggle("checked");
//计算计数器
// num += this.classList.contains("checked")?1:-1;
if (this.classList.contains("checked")){
num ++;
}else{
num --;
}
//执行all名字的修改
allName();
};
}
//全选按钮的点击
oAll.onclick = function(){
//改变自己的名字
this.classList.toggle("checked");
//根据当前名字决定所有li的选中状态
let x = this.classList.contains("checked")?"add":"remove";
for (let i=0;i<len;i++){
aLi[i].classList[x]("checked");
}
//改变计数器
num = this.classList.contains("checked")*len;
};
//反选按钮的点击、
oReverse.onclick = function(){
for (let i=0;i<len;i++){
aLi[i].classList.toggle("checked");
}
//改变num
num = len - num;
//检测all的全选状态
allName();
};
})();
</script>
</body>
</html>
img
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PilJB0oR-1615793442172)(C:/Users/%E7%AB%B9%E9%9D%92%E6%9A%AE%E9%9B%A8/AppData/Roaming/Typora/typora-user-images/1590025749082.png)]
- 选项卡
需求:
- 鼠标滑过想要查看的呢容显示对应的页面图片,同时显示选项卡下方的红色下滑线特效
<!DOCTYPE HTML>
<html>
<head>
<meta charset="UTF-8">
<title>Title</title>
<meta name="keywords" content="">
<meta name="description" content="">
<meta name="author" content="">
<style>
body{font-family: "Microsoft YaHei",serif;}
body,dl,dd,p,h1,h2,h3,h4,h5,h6{margin:0;}
ol,ul,li{margin:0;padding:0;list-style:none;}
img{border:none;}
#wrap{
width: 1080px;
height: 350px;
margin: 50px auto;
}
#wrap .nav{
position: relative;
width: 100%;
height: 40px;
background-color: #f5f5f5;
line-height: 40px;
font-size: 14px;
}
#wrap .nav p{
position: absolute;
top: 0;
left: 0;
width: 130px;
height: 40px;
background-color: #000;
color: #fff;
text-align: center;
}
#wrap .nav ul{
box-sizing: border-box;
width: 100%;
padding-left: 200px;
}
#wrap .nav ul li{
position: relative;
float: left;
margin-right: 32px;
cursor: pointer;
transition: color .3s;
}
#wrap .nav ul li:hover{
color: #db3a45;
}
#wrap .nav ul li::after{
position: absolute;
left: 0;
right: 0;
bottom: 0;
content: "";
width: 0%;
height: 2px;
margin: auto;
background-color: #db3a45;
transition: width .3s;
}
#wrap .nav ul li.active::after{
width: 100%;
}
#wrap .content{
width: 100%;
height: 255px;
margin-top: 20px;
}
#wrap .content>ul{
position: relative;
width: 100%;
height: 100%;
}
#wrap .content>ul li.first{
display: none;
overflow: hidden;
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
}
#wrap .content>ul li.first.show{
display: block;
}
#wrap .content>ul li.first ul{
width: 150%;
}
#wrap .content>ul li.first ul li{
float: left;
width: 340px;
height: 255px;
margin-right: 20px;
}
</style>
</head>
<body>
<div id="wrap">
<div class="nav">
<p class="title">独家精品策划</p>
<ul>
<li class="active">全部</li>
<li>列表一6666</li>
<li>列表二5254</li>
<li>列表三000</li>
<li>列表四333</li>
</ul>
</div>
<div class="content">
<ul>
<li class="first show">
<ul>
<li class="second"><img src="img2/1.jpg" alt=""></li>
<li class="second"><img src="img2/2.jpg" alt=""></li>
<li class="second"><img src="img2/3.jpg" alt=""></li>
</ul>
</li>
<li class="first">
<ul>
<li class="second"><img src="img2/4.jpg" alt=""></li>
<li class="second"><img src="img2/5.jpg" alt=""></li>
<li class="second"><img src="img2/6.jpg" alt=""></li>
</ul>
</li>
<li class="first">
<ul>
<li class="second"><img src="img2/7.jpg" alt=""></li>
<li class="second"><img src="img2/8.jpg" alt=""></li>
<li class="second"><img src="img2/9.jpg" alt=""></li>
</ul>
</li>
<li class="first">
<ul>
<li class="second"><img src="img2/10.jpg" alt=""></li>
<li class="second"><img src="img2/11.jpg" alt=""></li>
<li class="second"><img src="img2/12.jpg" alt=""></li>
</ul>
</li>
<li class="first">
<ul>
<li class="second"><img src="img2/3.jpg" alt=""></li>
<li class="second"><img src="img2/10.jpg" alt=""></li>
<li class="second"><img src="img2/4.jpg" alt=""></li>
</ul>
</li>
</ul>
</div>
</div>
<script>
(function(){
let aNavLi = document.querySelectorAll(".nav ul li"),
len = aNavLi.length,
aContentLi = document.querySelectorAll(".content ul li.first")
;
for (let i=0;i<len;i++){
aNavLi[i].onmouseenter = function(){
for (let j=0;j<len;j++){
aNavLi[j].classList.remove("active");
aContentLi[j].classList.remove("show");
}
this.classList.add("active");
aContentLi[i].classList.add("show");
};
}
})();
</script>
</body>
</html>
效果图
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QYilEdQK-1615793442176)(C:/Users/%E7%AB%B9%E9%9D%92%E6%9A%AE%E9%9B%A8/AppData/Roaming/Typora/typora-user-images/1590026286397.png)]
- 全选与反选-皮卡版
<!doctype html>
<html lang="zh-cn">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>全选与反选</title>
</head>
<body>
<input id="btn1" type="button" value="全选"/>
<input id="btn2" type="button" value="不选"/>
<input id="btn3" type="button" value="反选"/>
<div id="div1">
<input type="checkbox"/>人生若只如初见<br>
<input type="checkbox"/>何事秋风悲画扇<br>
<input type="checkbox"/>等闲变却故人心<br>
<input type="checkbox"/>却道故人心易变<br>
<input type="checkbox"/>骊山语罢清宵半<br>
<input type="checkbox"/>泪雨霖铃终不怨<br>
<input type="checkbox"/>何如薄幸锦衣郎<br>
<input type="checkbox"/>比翼连枝当日愿<br>
</div>
<script>
function pika() {
let oBtn1 = document.getElementById('btn1'),
oBtn2 = document.getElementById('btn2'),
oBtn3 = document.getElementById('btn3'),
oDiv = document.getElementById('div1'),
aCh = oDiv.getElementsByTagName('input');
oBtn1.onclick = function () {
for (let i = 0; i < aCh.length; i++) {
aCh[i].checked = true;
}
};
oBtn2.onclick = function () {
for (let i = 0; i < aCh.length; i++) {
aCh[i].checked = false;
}
};
oBtn3.onclick = function () {
for (let i = 0; i < aCh.length; i++) {
if (aCh[i].checked == true) {
aCh[i].checked = false
} else {
aCh[i].checked = true;
}
}
}
}
pika();
</script>
</body>
</html>
- 鼠标过相对应的图片-皮卡版
<!DOCTYPE HTML>
<html>
<head>
<meta charset="UTF-8">
<title>鼠标滑过显示对应的图片</title>
<style>
*{
margin: 0;
padding: 0;
list-style: none;
}
img {
border: none;
}
#wrap {
width: 1080px;
height: 350px;
margin: 50px auto;
}
#wrap .nav {
position: relative;
width: 100%;
height: 40px;
background-color: #f5f5f5;
line-height: 40px;
font-size: 14px;
}
#wrap .nav p {
position: absolute;
top: 0;
left: 0;
width: 130px;
height: 40px;
background-color: #000;
color: #fff;
text-align: center;
}
#wrap .nav ul {
box-sizing: border-box;
width: 100%;
padding-left: 200px;
}
#wrap .nav ul li {
position: relative;
float: left;
margin-right: 32px;
cursor: pointer;
transition: color .3s;
}
#wrap .nav ul li:hover {
color: #db3a45;
}
#wrap .nav ul li::after {
position: absolute;
left: 0;
right: 0;
bottom: 0;
content: "";
width: 0%;
height: 2px;
margin: auto;
background-color: #db3a45;
transition: width .3s;
}
#wrap .nav ul li.active::after {
width: 100%;
}
#wrap .content {
width: 100%;
height: 255px;
margin-top: 20px;
}
#wrap .content > ul {
position: relative;
width: 100%;
height: 100%;
}
#wrap .content > ul li.first {
display: none;
overflow: hidden;
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
}
#wrap .content > ul li.first.show {
display: block;
}
#wrap .content > ul li.first ul {
width: 150%;
}
#wrap .content > ul li.first ul li {
float: left;
width: 340px;
height: 255px;
margin-right: 20px;
}
</style>
</head>
<body>
<div id="wrap">
<div class="nav">
<p class="title">独家精品策划</p>
<ul>
<li class="active">全部</li>
<li>列表一</li>
<li>列表二</li>
<li>列表三</li>
<li>列表四</li>
</ul>
</div>
<div class="content">
<ul>
<li class="first show">
<ul>
<li class="second"><img src="images/1.jpg" alt=""></li>
<li class="second"><img src="images/2.jpg" alt=""></li>
<li class="second"><img src="images/3.jpg" alt=""></li>
</ul>
</li>
<li class="first">
<ul>
<li class="second"><img src="images/4.jpg" alt=""></li>
<li class="second"><img src="images/5.jpg" alt=""></li>
<li class="second"><img src="images/6.jpg" alt=""></li>
</ul>
</li>
<li class="first">
<ul>
<li class="second"><img src="images/7.jpg" alt=""></li>
<li class="second"><img src="images/8.jpg" alt=""></li>
<li class="second"><img src="images/9.jpg" alt=""></li>
</ul>
</li>
<li class="first">
<ul>
<li class="second"><img src="images/10.jpg" alt=""></li>
<li class="second"><img src="images/11.jpg" alt=""></li>
<li class="second"><img src="images/12.jpg" alt=""></li>
</ul>
</li>
<li class="first">
<ul>
<li class="second"><img src="images/13.jpg" alt=""></li>
<li class="second"><img src="images/14.jpg" alt=""></li>
<li class="second"><img src="images/15.jpg" alt=""></li>
</ul>
</li>
</ul>
</div>
</div>
<script>
let Afirst=document.querySelectorAll('.content>ul>li');
let Alist=document.querySelectorAll('.nav li');
for (let i = 0; i < Alist.length; i++) {
Alist[i].onmouseenter=function(){
for (let j = 0; j < Alist.length; j++) {
Alist[j].classList.remove('active');
}
for (let j = 0; j < Afirst.length; j++) {
Afirst[j].classList.remove('show');
}
Alist[i].classList.add('active');
Afirst[i].classList.add('show');
}
}
</script>
</body>
</html>