JS实现 Tab栏切换案例
要求:当鼠标点击上面相应的选项卡(tab),下面页面的内容也随之而改变。
结构分析:
全部的内容都放到一个大的盒子里面,盒子里面又可以分为上面和下面两个盒子。
上面的盒子放了 5个li,装着5个小的选项卡,默认会有一个被选中;
下面的盒子也包含了 5个 div 模块,模块内容与上面的选项一一对应,当前默认的只有第一个 div会被显示出来。
实现思路:
点击切换选项卡部分

Tab 栏切换有2个大的 模块
1、上面模块的选项卡,点击某一个,改变当前样式,底色变为红色,字体颜色变为白色。而其他的选项卡样式不发生改变(排他思想)
通过修改类名的方式实现。
2、下面模块的内容,会随着上面的选项卡变化。所以下面模块变化写到点击事件里面。
规律:下面的模块显示的内容和上面选项卡一一对应,相匹配。
核心思路:给上面模块里面所有的 li 添加自定义属性,属性值从 0 开始作为索引号。
排他思想:通过 for循环遍历数组中的元素,进入循环之后首先消除所有部分的样式,接着再为所点击的当前部分添加样式。
通过 setAttribute(name,value)创建自定义属性,name指的是为元素设置的自定义属性,value为自定义属性添加的属性值。
通过 getAttribute(name)获取元素的属性。name是属性的名称。
默认第一个选项卡对应的下面模块是显示的,需要在添加行内样式(style='display:block')因为CSS行内样式的优先级高于外部样式,会优先显示。
而(items[index].style.display = 'block';)这一句也相当于创建了行内样式。
实现代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Tab栏切换</title>
<style>
*{
margin:0;
padding:0;
}
.tab{
width:800px;
height:45px;
border:1px solid #ccc;
border-bottom:1px solid #c81623;
background: #fafafa;
position:relative;
margin:100px auto;
}
.tab_list li{
width:160px;
height:45px;
list-style:none;
line-height:45px;
text-align: center;
float:left;
}
.tab_list .current{
background-color:#c81623;
color:#fff;
}
.item{
width:800px;
height: 200px;
padding-top:40px;
/*line-height:200px;*/
font-size: 30px;
color:#fff;
text-align: center;
text-shadow:2px 2px 4px #000000;
background: #efefef;
/*opacity: 0.8;*/
top:47px;
position:absolute;
}
</style>
</head>
<body>
<div class='tab'>
<div class='tab_list'>
<ul>
<li class='current'>个性推荐</li>
<li>歌单</li>
<li>主播电台</li>
<li>排行榜</li>
<li>歌手</li>
</ul>
</div>
<div class='tab_con'>
<div class="item one" style='display:block'>每日歌曲推荐</div>
<div class="item two">精品歌单倾心推荐,给最懂音乐的你</div>
<div class="item thr">上瘾烟嗓情感之声</div>
<div class="item fou">新歌飙升榜</div>
<div class="item fiv">歌手排行榜</div>
</div>
</div>
<!-- tab 栏切换有2个模块
模块的选项卡,点击其中的某一个,被点击的这一个底色将变成红色的,其余的不变(排他思想)使用修改类的名称的方式。 -->
<!-- 下面显示模块内容,会随着上面的选项卡变化,所以下面模块变化写到点击事件里面。
规律:下面模块显示内容和上面的选项卡一一对应,相匹配。
--> <script>
var tab_list = document.querySelector('.tab_list');
var lis = tab_list.querySelectorAll('li');
var items = document.querySelectorAll('.item');
//for 循环绑定点击事件
for(var i=0;i < lis.length;i++){
lis[i].setAttribute('index',i);
lis[i].onclick = function() {
//
for(var i=0;i < lis.length;i++){
lis[i].className = '';
}
//留下现在需要用的
this.className = 'current';
//下面显示内容模块
var index = this.getAttribute('index');
console.log(index);
//去掉其他的 item,让这些隐藏起来
//只留下当前的 item,让它显示出来
for(var i=0;i<items.length;i++){
items[i].style.display='none';
}
items[index].style.display = 'block';
}
}
</script>
</body>
</html>
实现效果:

点击其它选项

JS实现 Tab栏切换案例的更多相关文章
- tab栏切换案例
<!DOCTYPE html><html><head lang="en"> <meta charset="UTF-8" ...
- js 实现tab栏切换效果
效果图: 源码: <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...
- jQuery带有定时器的tab栏切换
现在网上很多类似选项卡的切换,我们成为tab栏切换,比如下图: 新浪的tab栏切换 淘宝的tab栏切换 其中,新浪的tab栏鼠标放上去,可以快速的来回切换,但是如果采取ajax异步传输,不停去加载服务 ...
- tab栏切换制作
tab栏切换制作 先上图 要求1:默认状态,第一个选项卡被选中,展示第一个选项卡的内容 策略:第一个选项卡默认有被选中的样式,第一个选项卡对应的display: block,其他的dispaly设为n ...
- dataTable tab栏切换时错位解决办法
做后台管理类网站肯定要写列表,首选dataTable,功能强大 最近在做一个tab栏切换时发现了一个很诡异的事情:表头错位了! 主要时因为当table被隐藏后,table的header宽度会计算错乱, ...
- tab栏切换
最简单的tab栏切换 html部分 <ul class="tab"> <li class="item">待支付(1)</li> ...
- ES6面向对象实现tab栏切换效果
面向对象实现tab栏切换效果
- [javascript]switchTab:仿腾讯首页Tab栏切换js插件
腾讯首页的每个新闻栏目都是一个tab选项卡切换,属于延迟动作的:鼠标hover上去之后200毫秒才会切换,防止了因为浏览滑动导致的页面上选项卡的频繁切换.仿照这样的效果,自己写了一个js插件,实现了低 ...
- tab栏切换效果案例
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
随机推荐
- (转) Asp.net中实现同一用户名不能同时登录
最近找了一些单点登录的,发现了这篇文章,貌似还是可以实现的,先保存了. Web 项目中经常遇到的问题就是同一用户名多次登录的问题,相应的解决办法也很多,总结起来不外乎这几种解决办法: 将登录后的用 ...
- 菜鸟系列k8s——k8s快速入门(1)
k8s快速入门 1.快速创建k8s集群 参考网站:https://kubernetes.io/docs/tutorials/kubernetes-basics 点击教程菜单 1. Create a C ...
- HDU 1260 Tickets (动态规划)
Tickets Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Sub ...
- excel库中数据下载
PHP实现EXCEL下载数据 <?php include("Classes/PHPExcel.php"); $exce=new PHPExcel(); $exce->s ...
- MySQL创表--分页--自关联--
创建表book create table t_book( id int unsigned auto_increment primary key, bookName varchar(255) defau ...
- js设计模式--发布订阅模式
前言 本系列文章主要根据<JavaScript设计模式与开发实践>整理而来,其中会加入了一些自己的思考.希望对大家有所帮助. 概念 发布-订阅模式又叫观察者模式,它定义对象间的一种一对多的 ...
- Ansible PlayBook语法
PlayBook语法实例 playbook是由一个或多个play组成的列表,play的主要功能在于将事先归并为一组的主机装扮成事先通过Ansible中的tasks定义好的角色(play的内容被称为ta ...
- python基本数据类型零碎知识点
...
- 语句:if语句、do-while语句、while语句、for语句、for-in语句、with语句、label语句、switch语句以及break和continue语句;
ECMA-262规定了一组语句(也成为流控制语句),语句定义了ECMASript中的主要语法. 语句分类:条件分支语句.条件判断语句和循环语句 代码块:是一对包裹多行代码的花括号,代码块后不可加引号: ...
- vue--支付宝支付
1.支付宝支付:前端发起一个请求,后台返回一个页面,直接将返回的页面(一个表单),再执行表单提交 okFryOtherPayHandler(){ let reqBody = {}; reqBody.o ...