- 准备一个html文件,搭建选项卡框架
<!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>
* {
padding: 0;
margin: 0;
}
ul,ol {
list-style: none;
}
.header {
width: 600px;
height: 50px;
line-height: 50px;
background-color: aqua;
display: flex;
}
.header li {
width: 200px;
}
.content {
width: 600px;
height: 400px;
line-height: 400px;
text-align: center;
font-size: 100px;
}
.content li {
display: none;
}
.header .active {
background-color: orange;
}
.content .active {
display: block;
background-color: yellow;
}
</style>
</head>
<body>
<div class="box1">
<ul class="header">
<li class="active">header_1</li>
<li>header_2</li>
<li>header_3</li>
</ul>
<ol class="content">
<li class="active">content_1</li>
<li>content_2</li>
<li>content_3</li>
</ol>
</div>
<div class="box2">
<ul class="header">
<li class="active">header_1</li>
<li>header_2</li>
<li>header_3</li>
</ul>
<ol class="content">
<li class="active">content_1</li>
<li>content_2</li>
<li>content_3</li>
</ol>
</div>
<script src="./index.js"></script>
</body>
</html>
2.引入index.js文件
/**
* 面向对象 重构版本
* 寻找一个"机器",这个"机器"能够帮我们批量生产"选项卡"
* 目前来看并没有这个""机器",那么我们就需要自己先创造一个机器
* */
/**
* 思考:
* 1.这个机器需要什么?
* => 获取元素
* => 给获取的元素 添加上对应的事件
* */
function Tabs(ele) {
this.ele = document.querySelector(ele) //获取两个div标签
this.hLi = [...this.ele.querySelectorAll('.header li)]//获取header下的li
this.cLi = [...this.ele.querySelectorAll('.content li)] //获取content下的li
//创建选项卡的一些代码...
this.init()
}
Tabs.prototype.init = function() {
let that = this
this.hLi.forEach(function(item, index) { //遍历header下的所有li index是li对应的下标
item.onclick = function () { //给header内部的每一个li添加一个点击事件
//1.给所有的li取消类名
that.hLi.forEach(function(li, liIndex){
li.classList.remove('active') //给所有的li取消类名
that.cLi[liIndex].classList.remove('active')//利用下标将content内部的li去掉类名
})
//2.给当前点击的li添加一个类名
item.classList.add('active')
//根据点击的header里面的li给content里面的li添加类名
that.cLi[index].classList.add('active')
}
})
}