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 相关文章推荐
csdn 论坛技术区平均给分功能
Nov 07 Javascript
jquery进行数组遍历如何跳出当前的each循环
Jun 05 Javascript
jQuery实现html表格动态添加新行的方法
May 28 Javascript
简介JavaScript中的getUTCFullYear()方法的使用
Jun 10 Javascript
javascript实现tab切换的四种方法
Nov 05 Javascript
JS正则表达式验证密码格式的集中情况总结
Feb 23 Javascript
解决AngualrJS页面刷新导致异常显示问题
Apr 20 Javascript
js前端实现图片懒加载(lazyload)的两种方式
Apr 24 Javascript
详解React项目如何修改打包地址(编译输出文件地址)
Mar 21 Javascript
浅谈 Webpack 如何处理图片(开发、打包、优化)
May 15 Javascript
node基于async/await对mysql进行封装
Jun 20 Javascript
基于elementUI竖向表格、和并列的案例
Oct 26 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文件缓存方法总结
2016/03/16 PHP
PHP基于迭代实现文件夹复制、删除、查看大小等操作的方法
2017/08/11 PHP
PHP实现的ID混淆算法类与用法示例
2018/08/10 PHP
Javascript中的数学函数
2007/04/04 Javascript
解决iframe的frameborder在chrome/ff/ie下的差异
2010/08/12 Javascript
JS、DOM和JQuery之间的关系示例分析
2014/04/09 Javascript
JS实现在网页中弹出一个输入框的方法
2015/03/03 Javascript
JS+CSS实现DIV层的展开、收缩效果
2016/01/28 Javascript
基于jQuery实现动态搜索显示功能
2016/05/05 Javascript
js获取元素的外链样式的简单实现方法
2016/06/06 Javascript
js获取html的span标签的值方法(超简单)
2016/07/26 Javascript
jQuery设置聚焦并使光标位置在文字最后的实现方法
2016/08/02 Javascript
详细总结Javascript中的焦点管理
2016/09/17 Javascript
JavaScript 随机验证码的生成实例代码
2016/09/22 Javascript
d3.js入门教程之数据绑定详解
2017/04/28 Javascript
jQuery实现验证表单密码一致性及正则表达式验证邮箱、手机号的方法
2017/12/05 jQuery
Vue中UI组件库之Vuex与虚拟服务器初识
2019/05/07 Javascript
微信小程序中显示倒计时代码实例
2019/05/09 Javascript
基于layui内置模块(element常用元素的操作)
2019/09/20 Javascript
node.js使用fs读取文件出错的解决方案
2019/10/23 Javascript
vue动态禁用控件绑定disable的例子
2019/10/28 Javascript
[37:03]完美世界DOTA2联赛PWL S3 INK ICE vs GXR 第二场 12.16
2020/12/18 DOTA
Pandas 同元素多列去重的实例
2018/07/03 Python
python实现将中文日期转换为数字日期
2020/07/14 Python
Numpy中的数组搜索中np.where方法详细介绍
2021/01/08 Python
收集的22款给力的HTML5和CSS3帮助工具
2012/09/14 HTML / CSS
HTML5利用约束验证API来检查表单的输入数据的代码实例
2016/12/20 HTML / CSS
俄罗斯最大的香水和化妆品网上商店:Randewoo
2020/11/05 全球购物
班级道德讲堂实施方案
2014/02/24 职场文书
庆元旦文艺演出主持词
2014/03/27 职场文书
党员自评材料范文
2014/12/17 职场文书
求职信:求职应该注意的问题
2019/04/24 职场文书
nginx+lua单机上万并发的实现
2021/05/31 Servers
详解CSS中的特指度和层叠问题
2021/07/15 HTML / CSS
《废话连篇——致新手》——chinapizza
2022/04/05 无线电
vue项目打包后路由错误的解决方法
2022/04/13 Vue.js