JS实现选项卡效果的代码实例


Posted in Javascript onMay 20, 2019

选项卡这个效果估计以后的项目会经常涉及到,对代码还是半熟练的情况下还是写下来吧。
先来布局一个简单的页面:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title></title>
    <style type="text/css">
      *{margin: 0;padding: 0;list-style: none;}
      #box{margin: 50px;}
      #box li{width: 100px;height: 40px;line-height: 40px;text-align: center;background-color: #d8d8d8;margin-right: 2px;float: left;}
      #box .active{background: red;}
      #content{clear: both;}
      #content div{width: 404px;height: 200px;border: 1px solid #d8d8d8;display: none;}
    </style>
  </head>
  <body>
    <div id="box">
      <!--这个ul为选项卡的菜单,提供选择项,并且设置其中一个li为默认样式-->
      <ul>
        <li class="active">新闻</li>
        <li>社会</li>
        <li>科技</li>
        <li>娱乐</li>
      </ul>
      <!--这个div为选项卡的内容,显示不同菜单的不同内容,并且设置其中一个div为可见,其他隐藏-->
      <div id="content">
        <div style="display: block;">新闻</div>
        <div>社会</div>
        <div>科技</div>
        <div>娱乐</div>
      </div>
    </div>
  </body>
</html>

选项卡的制作原理是:有若干的选项和对应数量的内容,当对其中一个选项进行操作时,显示对应内容,其他内容不显示。所以,在页面布局的时候,我们先给一个选项设置特殊样式和显示其对应的内容,其他选项样式不变,对应内容隐藏。当操作选项时,把选项的类名改为特殊样式的类名,并且显示对应内容。

<script type="text/javascript">
  window.onload=function(){
    var oBox=document.getElementById('box');
    var aLi=oBox.getElementsByTagName('li');
    var oCon=document.getElementById('content');
    var aDiv=oCon.getElementsByTagName('div');

    for(var i=0;i<aLi.length;i++){
      aLi[i].index=i;  //为每个li添加对应的索引index
      aLi[i].onclick=function(){  //循环为每个li添加onclick事件
      for(var i=0;i<aLi.length;i++){
        aLi[i].className=''; //循环清空li样式
        aDiv[i].style.display='none'; //循环隐藏所有div
      }
      this.className='active'; //当前点击的元素样式变成active
      aDiv[this.index].style.display='block';  //this.index 获取当前li对应的索引
      }
    }
  }
</script>

今天在做选项卡效果时遇到了一个非常低级的错误,但却迟迟找不到原因,如下:
这个是我布局的选项卡的菜单,看起来很简单,一个ul包着3个li,其中一个是 |,所以可以点击的菜单项只有两项,没毛病。

<ul id="text">
  <li class="active"><a href="javascript:" rel="external nofollow" rel="external nofollow" >必备软件</a></li>
  <li id="shu">|</li>
  <li><a href="javascript:" rel="external nofollow" rel="external nofollow" >常用软件</a></li>
</ul>

内容就不看了,接下来我就开始写JS的代码,getElementById什么的巴拉巴拉开始写,写完for循环觉得写完了,然后就运行。。。默认页正常,点击,,空白。?????怎么回事?F12,aLink[i] is undefind;加了一个console.log,检测获取的aLi,aLink,有值,能获取,没错。然后下面循环检测aLink[i],未定义,这是什么情况?在JS代码搞了将近一个小时,换获取方法,换变量名….各种方法,没效果。万万没想到的是,重新检测aLi的时候,发现长度为3。。顿时懵逼,aLink的长度为2,所以肯定有一个找不到。赶紧把第二个li改成span,成功。万恶的 ||||||||。只能说自己的知识还不够,还要继续努力!!!

var oBox=document.getElementById('box');
var oNav=document.getElementById('nav');
var aLi=oNav.getElementsByTagName('li');
var oCon=document.getElementById('con');
var aLink=oBox.getElementsByClassName('hide');

for(var i=0;i<aLi.length;i++){
  aLi[i].index=i; //为每个li添加对应的索引index
  aLi[i].onclick=function(){ //循环为每个li添加onclick事件
    for(var i=0;i<aLi.length;i++){
      aLi[i].className=''; //循环清空li样式
      aLink[i].style.display='none'; //循环隐藏所有div
    }
    this.className='active'; //当前点击的元素样式变成active
    aLink[this.index].style.display='block'; //this.index 获取当前li对应的索引
  }
}

以上所述是小编给大家介绍的JS选项卡效果详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
为Yahoo! UI Extensions Grid增加内置的可编辑器
Mar 10 Javascript
js获取元素到文档区域document的(横向、纵向)坐标的两种方法
May 17 Javascript
jquery事件preventDefault()方法用法实例
Jan 16 Javascript
javascript内置对象操作详解
Feb 04 Javascript
浅谈document.write()输出样式
May 07 Javascript
js控制li的隐藏和显示实例代码
Oct 15 Javascript
详解JS中的快速排序与冒泡
Jan 10 Javascript
Bootstrap BootstrapDialog使用详解
Feb 17 Javascript
AngularJS  ng-repeat遍历输出的用法
Jun 19 Javascript
Node Puppeteer图像识别实现百度指数爬虫的示例
Feb 22 Javascript
javascript的惯性运动实现代码实例
Sep 07 Javascript
JavaScript实现拖动对话框效果的实现代码
Oct 12 Javascript
微信打开网址添加在浏览器中打开提示的办法
May 20 #Javascript
浅谈Vuex注入Vue生命周期的过程
May 20 #Javascript
微信小程序图表插件wx-charts用法实例详解
May 20 #Javascript
Nuxt项目支持eslint+pritter+typescript的实现
May 20 #Javascript
vue3.0 搭建项目总结(详细步骤)
May 20 #Javascript
vue-cli webpack配置文件分析
May 20 #Javascript
微信小程序开发之左右分栏效果的实例代码
May 20 #Javascript
You might like
php安全开发 添加随机字符串验证,防止伪造跨站请求
2013/02/14 PHP
php+mysqli使用面向对象方式查询数据库实例
2015/01/29 PHP
php实现Mysql简易操作类
2015/10/11 PHP
PHP实现通过strace定位故障原因的方法
2018/04/29 PHP
PHP的curl函数的用法总结
2019/02/14 PHP
javascript下高性能字符串连接StringBuffer类
2010/08/16 Javascript
修改jquery.lazyload.js实现页面延迟载入
2010/12/22 Javascript
基于Jquery的表格隔行换色,移动换色,点击换色插件
2010/12/22 Javascript
jQuery1.6 使用方法一
2011/11/23 Javascript
toggle一个div显示或隐藏且可扩展成自定义下拉框
2013/09/12 Javascript
js查找某元素中的所有图片地址的方法
2014/01/16 Javascript
纯JS实现旋转图片3D展示效果
2015/04/12 Javascript
js识别uc浏览器的代码
2015/11/06 Javascript
jQuery+jsp下拉框联动获取本地数据的方法(附源码)
2015/12/03 Javascript
Bootstrap对话框使用实例讲解
2016/09/24 Javascript
详解js产生对象的3种基本方式(工厂模式,构造函数模式,原型模式)
2017/01/09 Javascript
js手机号批量滚动抽奖实现代码
2020/04/17 Javascript
javascript容错处理代码(屏蔽js错误)
2017/01/20 Javascript
JavaScript组件开发之输入框加候选框
2017/03/10 Javascript
微信小程序将字符串生成二维码图片的操作方法
2018/07/17 Javascript
Vue配置marked链接添加target=&quot;_blank&quot;的方法
2019/07/19 Javascript
element中el-container容器与div布局区分详解
2020/05/13 Javascript
[01:09:20]NB vs NAVI Supermajor小组赛A组 BO3 第二场 6.2
2018/06/03 DOTA
python使用正则表达式替换匹配成功的组并输出替换的次数
2017/11/22 Python
np.random.seed() 的使用详解
2020/01/14 Python
使用pytorch搭建AlexNet操作(微调预训练模型及手动搭建)
2020/01/18 Python
python selenium操作cookie的实现
2020/03/18 Python
Python爬虫之Selenium库的使用方法
2021/01/03 Python
美国购买和销售礼品卡平台:Raise
2017/01/13 全球购物
Ajax的优点和缺点
2014/11/21 面试题
天猫某品牌专卖店运营计划书
2014/03/21 职场文书
小学生教师节演讲稿
2014/09/03 职场文书
2014年最新离婚协议书范本
2014/10/11 职场文书
社区工作者个人总结
2015/02/28 职场文书
绿色环保倡议书
2015/04/28 职场文书
幼儿园教师培训心得体会
2016/01/21 职场文书