JavaScript 用循环绑定事件制作tab栏切换 ,点赞加关注更多内容持续更新
分享一个用for循环,循环绑定事件事件来制作的tab栏切换模板,用事件委托制作当然也可以
先来看看效果:
思路:
其实这里面最重要的一个思想就是“排他思想”。意思就是将别人的样式都去除,然后再加上自己的样式,这样就可以实现点击相应的tab栏按钮,其它按钮的样式全部消失,加上自己的样式。
直接附上全部代码,全部拷贝到自己的编辑器里就可以运行,我这里只是提供一个模板一个实现思路,感兴趣的小伙伴可以拷贝到自己的电脑上,更改样式和内容,实现更丰富的效果。
<!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">
<link href="style.css" rel="stylesheet" type="text/css" />
<title></title>
</head>
<body>
<style>
/* 设置全局样式 */
* {
margin: 0;
padding: 0;
list-style: none;
}
/* 设置导航条样式 */
ul {
width: 500px;
height: 50px;
margin: 0px auto;
}
/* 设置内容容器样式 */
ol{
margin: 0px auto;
}
/* 设置每个导航tab的样式 */
ul li {
float: left;
width: 100px;
height: 50px;
line-height: 50px;
text-align: center;
cursor: pointer;
}
/* 设置导航tab hover时的样式 */
ul li:hover {
background-color: rgb(228, 228, 228);
}
/* 设置内容项容器的样式 */
ol {
width: 500px;
height: 100px;
}
/* 设置每个内容项的样式 */
ol li {
display: none;
width: 500px;
height: 100px;
background-color: rgb(238, 238, 238);
box-shadow: -5px 5px 5px rgb(197, 197, 197);
text-align: center;
line-height: 100px;
}
/* 设置选中tab的样式 */
.active1 {
background-color: rgb(228, 228, 228)
}
/* 设置选中内容项的样式 */
.active2 {
display: block;
}
</style>
</head>
<body>
<div>
<!-- 导航条 -->
<ul>
<li class="active1">TAB 1</li>
<li>TAB 2</li>
<li>TAB 3</li>
<li>TAB 4</li>
<li>TAB 5</li>
</ul>
<!-- 内容容器 -->
<ol>
<li class="active2">内容一</li>
<li>内容二</li>
<li>内容三</li>
<li>内容四</li>
<li>内容五</li>
</ol>
</div>
<script>
// 获取导航项列表和内容项列表
const navLi = document.querySelectorAll('ul li')
let content = document.querySelectorAll('ol li')
// 循环给每个导航项绑定点击事件
for (let i = 0; i < navLi.length; i++) {
navLi[i].addEventListener('click', function () {
// 循环遍历所有导航项和内容项,移除当前选中状态
for (let j = 0; j < navLi.length; j++) {
navLi[j].classList.remove('active1')
content[j].classList.remove('active2')
}
// 将当前点击的导航项和对应的内容项加上选中状态
this.classList.add('active1')
content[i].classList.add('active2')
})
}
</script>
</script>
</body>
</html>