tab栏切换原理


Posted in Javascript onMarch 22, 2017

本文是我学习tab栏切换时的笔记,步骤很详细。比较适用于JavaScript初学者

1.基础 - 排他思想

如图,点击任意一个按钮,当前按钮应该显示橘色,其他显示默认颜色灰色。

代码运行步骤:

利用for循环遍历5个按钮;

选中的按钮进行 onclick 事件时,首先删除所有按钮的类名,使其全部显示灰色(34行);

然后给当前点击的按钮添加指定类名,使其显示橘色(37行)。

tab栏切换原理

示例代码:

<!DOCTYPE html>
<html>
 <head>
 <meta charset="utf-8">
 <title>tab栏切换效果</title>
 <style media="screen">
  *{
  margin: 0;
  padding: 0;
  border: 0 none;
  outline: none;
  }
  #btns{
  width: 300px;
  margin: 100px auto;
  }
  #btns button {
  width: 60px;
  height: 30px;
  float: left;
  border-right: 1px solid #ccc;
  }
  .color{
  background-color: #eb923f;
  }
 </style>
 <script type="text/javascript">
  window.onload = function () {
  var btns = document.getElementById("btns").getElementsByTagName("button");
  for (var i = 0; i < btns.length; i++) {
   btns[i].onclick = function () {
   for (var j = 0; j < btns.length; j++) {
    //把所有的button清空类名
    btns[j].className = "";
   }
   //点击的那个盒子添加指定类名
   this.className = "color";
   }
  }
  }
 </script>
 </head>
 <body>
 <div id="btns">
  <button class="color">按钮1</button>
  <button>按钮2</button>
  <button>按钮3</button>
  <button>按钮4</button>
  <button>按钮5</button>
 </div>
 </body>
</html>

2.tab栏切换

如图:在排他思想的基础上,五个按钮底下添加五个新盒子,并用一个大盒子将按钮和底下的盒子包裹。

底下的盒子全部隐藏,默认只显示第一个。

tab栏切换原理

新增步骤:

为btns[i]添加自定义属性index,用来关联下面的大盒子(42行);

点击按钮后先让底下的盒子全部隐藏(54行);

然后给当前所点击按钮相关联的盒子添加指定属性(57行)。

示例代码:

<!DOCTYPE html>
<html>
 <head>
 <meta charset="utf-8">
 <title>tab栏切换效果</title>
 <style media="screen">
  *{
  margin: 0;
  padding: 0;
  border: 0 none;
  outline: none;
  }
  .baohan{
  width: 300px;
  margin: 100px auto;
  border: 1px solid #ccc;
  }
  #btns button {
  width: 60px;
  height: 30px;
  float: left;
  border-right: 1px solid #ccc;
  }
  #divs div {
  width: 300px;
  height: 100px;
  font-size: 60px;
  padding-top: 60px;
  background-color: #eb923f;
  text-align: center;
  display: none;
  }
  .color{
  background-color: #eb923f;
  }
 </style>
 <script type="text/javascript">
  window.onload = function () {
  var btns = document.getElementById("btns").getElementsByTagName("button");
  var divs = document.getElementById("divs").getElementsByTagName("div");
  for (var i = 0; i < btns.length; i++) {
   btns[i].index = i; //自定义属性,用于关联下面的大盒子
   btns[i].onclick = function () {

   for (var j = 0; j < btns.length; j++) {
    //把所有的button清空类名
    btns[j].className = "";
   }
   //点击的那个盒子添加指定类名
   this.className = "color";
   for (var i = 0; i < divs.length; i++) {
    //先让底下的div全部隐藏
    divs[i].style.display = "none";
   }
   //然后给当前所点击按钮相关联的盒子添加指定属性
   divs[this.index].style.display = "block";
   }
  }
  }
 </script>
 </head>
 <body>
 <div class="baohan">
  <div id="btns">
  <button class="color">按钮1</button>
  <button>按钮2</button>
  <button>按钮3</button>
  <button>按钮4</button>
  <button>按钮5</button>
  </div>
  <div id="divs">
  <div style="display:block;">1</div>
  <div>2</div>
  <div>3</div>
  <div>4</div>
  <div>5</div>
  </div>
 </div>
 </body>
</html>

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持三水点靠木!

Javascript 相关文章推荐
javascript innerText和innerHtml应用
Jan 28 Javascript
浅谈Javascript面向对象编程
Nov 15 Javascript
基于zepto.js简单实现上传图片
Jun 21 Javascript
功能强大的Bootstrap效果展示(二)
Aug 03 Javascript
Javascript将JSON日期格式化
Aug 23 Javascript
easyui combotree加载静态数据问题(选不上)解决方法
Dec 26 Javascript
微信小程序实现手势图案锁屏功能
Jan 30 Javascript
PM2自动部署代码步骤流程总结
Dec 10 Javascript
小程序自定义日历效果
Dec 29 Javascript
elementUI多选框反选的实现代码
Apr 03 Javascript
小程序如何支持使用 async/await详解
Sep 12 Javascript
微信小程序 轮播图实现原理及优化详解
Sep 29 Javascript
js中的DOM模拟购物车功能
Mar 22 #Javascript
js+canvas实现动态吃豆人效果
Mar 22 #Javascript
JavaScript实现星星等级评价功能
Mar 22 #Javascript
discuz表情的JS提取方法分析
Mar 22 #Javascript
详解vue2.0组件通信各种情况总结与实例分析
Mar 22 #Javascript
JS简单封装的图片无缝滚动效果示例【测试可用】
Mar 22 #Javascript
Vue计算属性的学习笔记
Mar 22 #Javascript
You might like
discuz的php防止sql注入函数
2011/01/17 PHP
ThinkPHP表单令牌错误的相关解决方法分析
2016/05/20 PHP
Yii框架布局文件的动态切换操作示例
2019/11/11 PHP
TP5框架实现签到功能的方法分析
2020/04/05 PHP
javascript Discuz代码中的msn聊天小功能
2008/05/25 Javascript
jquery实现固定顶部导航效果(仿蘑菇街)
2013/03/21 Javascript
JS实现DIV容器赋值的方法
2015/12/14 Javascript
jQueryUI中的datepicker使用方法详解
2016/05/25 Javascript
想学习javascript JS和jQuery哪个重要 先学哪个
2016/12/11 Javascript
vue实现随机验证码功能的实例代码
2019/04/30 Javascript
el-input 标签中密码的显示和隐藏功能的实例代码
2019/07/19 Javascript
vue搜索页开发实例代码详解(热门搜索,历史搜索,淘宝接口演示)
2020/04/11 Javascript
python复制与引用用法分析
2015/04/08 Python
Python网络编程 Python套接字编程
2017/09/13 Python
python3设计模式之简单工厂模式
2017/10/17 Python
Python实现一个简单的验证码程序
2017/11/03 Python
python 日志增量抓取实现方法
2018/04/28 Python
python的xpath获取div标签内html内容,实现innerhtml功能的方法
2019/01/02 Python
Python实现的微信支付方式总结【三种方式】
2019/04/13 Python
Python pandas对excel的操作实现示例
2020/07/21 Python
解决PyCharm IDE环境下,执行unittest不生成测试报告的问题
2020/09/03 Python
python 写一个水果忍者游戏
2021/01/13 Python
Canvas图片分割效果的实现
2019/07/29 HTML / CSS
C语言开发工程师测试题
2016/12/20 面试题
在网络中有两台主机A和B,并通过路由器和其他交换设备连接起来,已经确认物理连接正确无误,怎么来测试这两台机器是否连通?如果不通,怎么来判断故障点?怎么排
2014/01/13 面试题
信息管理专业学生自荐信格式
2013/09/22 职场文书
房地产融资计划书
2014/01/10 职场文书
年会搞笑主持词
2014/03/27 职场文书
《飞向蓝天的恐龙》教学反思
2014/04/09 职场文书
小露珠教学反思
2014/04/30 职场文书
住房租房协议书
2014/08/20 职场文书
学习优秀共产党员先进事迹思想报告
2014/09/17 职场文书
群众路线教育实践活动剖析材料
2014/09/30 职场文书
2015年施工员工作总结范文
2015/04/20 职场文书
运动员入场词
2015/07/18 职场文书
基于Redis延迟队列的实现代码
2021/05/13 Redis