先看效果:
html布局部分
<div class="container"> <ul> <li><a href='#'>第一栏</a></li> <li><a href='#'>第二栏</a></li> <li><a href='#'>第三栏</a></li> <li><a href='#'>第四栏</a></li> <li><a href='#'>第五栏</a></li> </ul> /* <div style="clear: both;"></div>*/ <div class="box box1"> 第一大模块 </div> <div class="box"> 第二大模块 </div> <div class="box"> 第三大模块 </div> <div class="box"> 第四大模块 </div> <div class="box"> 第五大模块 </div>
红色部分是下面JS所需获取的部分
前面可以自己可以修改样式
这里就不演示了。
主要说一下script部分
首先要对需要用到的元素进行获取
这里面要获取五个li标签和五个div标签
var lis = document.querySelector('ul').querySelectorAll('li'); console.log(lis); var boxs = document.querySelectorAll('.box'); console.log(boxs);
显示正常即可
因为我们是点击每一个li标签对每一个div进行切换效果
所以我们要先获取每个li的点击事件:
for (var i = 0; i < lis.length; i++) { lis[i].addEventListener('click', function() {触发什么事件} }
然后得让他点击哪个盒子哪个li就发生什么变化 其他的li看不见
在点击事件里面写个循环
for (var i = 0; i < lis.length; i++) { lis[i].className = ''; } this.className = 'current';
在点击事件上方写入
lis[i].setAttribute('index',i);
给每个li创建一个新的index索引号然后定义一个变量接收
在this.className = 'current'下方写入
var index=this.getAttribute('index');
最后获取div盒子里的索引号把点击的盒子给显示出来,也是用到排他思想
for (var i = 0; i < boxs.length; i++) { // 先把每个div盒子给隐藏起来 boxs[i].style.display='none'; } boxs[index].style.display = 'block'
最后附上完整代码:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>tba</title> <style type="text/css"> * { padding: 0; margin: 0; } ul li { list-style-type: none; float: left; width: 20%; box-sizing: border-box; height: 50px; } .current { box-shadow: 5px 5px 3px black; font-size: 20px; } li a { display: block; text-decoration: none; color: #000000; text-align: center; line-height: 50px; height: 50px; background-color: #00FFFF; margin: 1px; border-radius: 5%; } .box { text-align: center; line-height: 500px; font-size: 50px; margin-top: 10px; width: 100%; height: 500px; /* display: none; */ border: 1px solid black; box-sizing: border-box; display: none; } .box1 { display: block; } </style> </head> <body> <div class="container"> <ul> <li><a href='#'>第一栏</a></li> <li><a href='#'>第二栏</a></li> <li><a href='#'>第三栏</a></li> <li><a href='#'>第四栏</a></li> <li><a href='#'>第五栏</a></li> </ul> <div style="clear: both;"></div> <div class="box box1"> 第一大模块 </div> <div class="box"> 第二大模块 </div> <div class="box"> 第三大模块 </div> <div class="box"> 第四大模块 </div> <div class="box"> 第五大模块 </div> <script type="text/javascript"> // 首先先获取需要使用的元素 var lis = document.querySelector('ul').querySelectorAll('li'); console.log(lis); var boxs = document.querySelectorAll('.box'); console.log(boxs); for (var i = 0; i < lis.length; i++) { // 设置索引 lis[i].setAttribute('index',i); // 对每个li设置点击事件 lis[i].addEventListener('click', function() { // 当每个li被点击过后,其他的样式全部清除,只留下一个当前点击的样式(阴影样式),这里用到排他思想(去除所有的,只保留自己) for (var i = 0; i < lis.length; i++) { // 点击过后清除所有的li的样式 lis[i].className = ''; } // 只显示当前点击的li样式 this.className = 'current'; // 给每个li创建一个新的index索引号 // 然后定义一个变量接收 var index=this.getAttribute('index'); for (var i = 0; i < boxs.length; i++) { // 先把每个div盒子给隐藏起来 boxs[i].style.display='none'; } // 最后获取div盒子里的索引号把点击的盒子给显示出来,也是用到排他思想 boxs[index].style.display = 'block' }) } </script> </body> </html>