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 相关文章推荐
javascript contains和compareDocumentPosition 方法来确定是否HTML节点间的关系
Feb 04 Javascript
JavaScript定时器详解及实例
Aug 01 Javascript
搭建pomelo 开发环境
Jun 24 Javascript
《JavaScript DOM 编程艺术》读书笔记之JavaScript 语法
Jan 09 Javascript
基于JavaScript实现文字超出部分隐藏
Feb 29 Javascript
jquery自适应布局的简单实例
May 28 Javascript
基于JavaScript+HTML5 实现打地鼠小游戏逻辑流程图文详解(附完整代码)
Nov 02 Javascript
vue中设置、获取、删除cookie的方法
Sep 21 Javascript
vue+echarts实现可拖动节点的折线图(支持拖动方向和上下限的设置)
Apr 12 Javascript
vue项目中使用scss的方法步骤
May 16 Javascript
小程序开发之模态框组件封装
Apr 23 Javascript
angular中的post请求处理示例详解
Jun 30 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缓存技术的使用说明
2011/08/06 PHP
对laravel的session获取与存取方法详解
2019/10/08 PHP
js二级地域选择的实现方法
2013/06/17 Javascript
Tab切换组件(选项卡功能)实例代码
2013/11/21 Javascript
JavaScript中rem布局在react中的应用
2015/12/09 Javascript
Bootstrap入门书籍之(零)Bootstrap简介
2016/02/17 Javascript
ionic隐藏tabs的方法
2016/08/29 Javascript
浅谈jQuery中事情的动态绑定
2017/02/12 Javascript
JS中利用FileReader实现上传图片前本地预览功能
2018/03/02 Javascript
jQuery实现的简单手风琴效果示例
2018/08/29 jQuery
vue解决使用webpack打包后keep-alive不生效的方法
2018/09/01 Javascript
vue项目环境变量配置的实现方法
2018/10/12 Javascript
JS回调函数深入理解
2019/10/16 Javascript
js实现秒表计时器
2019/12/16 Javascript
小程序自动化测试的示例代码
2020/08/11 Javascript
Python简单实现enum功能的方法
2016/04/25 Python
python 中if else 语句的作用及示例代码
2018/03/05 Python
python2.6.6如何升级到python2.7.14
2018/04/08 Python
python自动重试第三方包retrying模块的方法
2018/04/24 Python
Python3实现的简单三级菜单功能示例
2019/03/12 Python
python实现数据分析与建模
2019/07/11 Python
解决HTML5中的audio在手机端和微信端的不能自动播放问题
2019/11/04 HTML / CSS
HTML5去掉输入框type为number时的上下箭头的实现方法
2020/01/03 HTML / CSS
含精油的天然有机化妆品:Indemne
2019/08/27 全球购物
澳大利亚领先的在线药房:Pharmacy Online(有中文站)
2020/02/22 全球购物
销售工作岗位职责
2013/12/24 职场文书
家长会演讲稿范文
2014/01/10 职场文书
元旦活动感言
2014/03/08 职场文书
办公室打字员岗位职责
2014/04/16 职场文书
三方合作协议书范本
2014/04/18 职场文书
诉讼授权委托书
2014/10/15 职场文书
合作与交流自我评价
2015/03/09 职场文书
2015年生产车间工作总结
2015/04/22 职场文书
董事长开业致辞
2015/07/29 职场文书
详解MySQL事务的隔离级别与MVCC
2021/04/22 MySQL
Redis keys命令的具体使用
2022/06/05 Redis