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 相关文章推荐
JS 巧妙获取剪贴板数据 Excel数据的粘贴
Jul 09 Javascript
初学js插入节点appendChild insertBefore使用方法
Jul 04 Javascript
JavaScript设计模式之适配器模式介绍
Dec 28 Javascript
被遗忘的javascript的slice() 方法
Apr 20 Javascript
JS类的定义与使用方法深入探索
Nov 26 Javascript
js倒计时显示实例
Dec 11 Javascript
angular仿支付宝密码框输入效果
Mar 25 Javascript
vue的Virtual Dom实现snabbdom解密
May 03 Javascript
浅谈FastClick 填坑及源码解析
Mar 02 Javascript
代码整洁之道(重构)
Oct 25 Javascript
浅析JavaScript中的事件委托机制跟深浅拷贝
Jan 20 Javascript
js不常见操作运算符总结
Nov 20 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
基于PHP选项与信息函数的使用详解
2013/05/10 PHP
php异常处理使用示例
2014/02/25 PHP
PHP采用curl模仿用户登陆新浪微博发微博的方法
2014/11/07 PHP
php中异常处理方法小结
2015/01/09 PHP
PHP生成随机数的方法总结
2018/03/01 PHP
Laravel配置全局公共函数的方法步骤
2019/05/09 PHP
jquery用get实现ajax在ie里面刷新不进入后台解决方法
2013/08/12 Javascript
onmouseover和onmouseout的一些问题思考
2013/08/14 Javascript
open 动态修改img的onclick事件示例代码
2013/11/13 Javascript
使用jquery实现IE下按backspace相当于返回操作
2014/03/18 Javascript
JS创建类和对象的两种不同方式
2014/08/08 Javascript
jQuery学习笔记之创建DOM元素
2015/01/19 Javascript
使用vue实现点击按钮滑出面板的实现代码
2017/01/10 Javascript
关于ES6箭头函数中的this问题
2018/02/27 Javascript
详解如何在vue项目中使用eslint+prettier格式化代码
2018/11/10 Javascript
javascrit中undefined和null的区别详解
2019/04/07 Javascript
JavaScript实时更新当前的时间的示例代码
2020/07/15 Javascript
Angular+ionic实现折叠展开效果的示例代码
2020/07/29 Javascript
python中如何使用朴素贝叶斯算法
2017/04/06 Python
Pycharm创建项目时如何自动添加头部信息
2019/11/14 Python
使用PyQt5实现图片查看器的示例代码
2020/04/21 Python
Docker如何部署Python项目的实现详解
2020/10/26 Python
英国领先的在线旅游和休闲零售商:lastminute.com
2019/01/23 全球购物
一份软件工程师的面试试题
2016/02/01 面试题
九年级科学教学反思
2014/01/29 职场文书
开学典礼主持词
2014/03/19 职场文书
优秀员工推荐信
2014/05/10 职场文书
党的群众路线教育实践活动宣传标语口号
2014/06/06 职场文书
尊师重教演讲稿
2014/09/04 职场文书
给客户的感谢信
2015/01/21 职场文书
家装电话营销开场白
2015/05/29 职场文书
小学运动会通讯稿
2015/07/18 职场文书
2016年大学生社区服务活动总结
2016/04/06 职场文书
MySQL中你可能忽略的COLLATION实例详解
2021/05/12 MySQL
Python自动化工具之实现Excel转Markdown表格
2022/04/08 Python
MySQL的存储过程和相关函数
2022/04/26 MySQL