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 继承的实现
Jul 09 Javascript
获取HTML DOM节点元素的方法的总结
Aug 21 Javascript
JavaScript中两个感叹号的作用说明
Dec 28 Javascript
Jquery实现控件的隐藏和显示实例
Feb 08 Javascript
bootstrap实现弹窗和拖动效果
Jan 03 Javascript
js 获取站点应用名的简单实例
Aug 18 Javascript
Vue2.0实现组件数据的双向绑定问题
Mar 06 Javascript
js调用设备摄像头的方法
Jul 19 Javascript
在 Angular-cli 中使用 simple-mock 实现前端开发 API Mock 接口数据模拟功能的方法
Nov 28 Javascript
浅谈vue中$bus的使用和涉及到的问题
Jul 28 Javascript
DWR内存兼容及无法调用问题解决方案
Oct 16 Javascript
jQuery-App输入框实现实时搜索
Nov 19 jQuery
微信打开网址添加在浏览器中打开提示的办法
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 UTF8中文字符截断函数代码
2012/09/11 PHP
百度工程师讲PHP函数的实现原理及性能分析(二)
2015/05/13 PHP
laravel http 自定义公共验证和响应的方法
2019/09/29 PHP
PHP 图片处理
2020/09/16 PHP
jQuery一步一步实现跨浏览器的可编辑表格,支持IE、Firefox、Safari、Chrome、Opera
2009/08/28 Javascript
JavaScript原型继承之基础机制分析
2011/08/26 Javascript
JavaScript栏目列表隐藏/显示简单实现
2013/04/03 Javascript
js游戏人物上下左右跑步效果代码分享
2015/08/28 Javascript
nodeJS实现简单网页爬虫功能的实例(分享)
2017/06/08 NodeJs
Vue列表渲染的示例代码
2018/11/01 Javascript
详解基于iview-ui的导航栏路径(面包屑)配置
2019/02/22 Javascript
js继承的这6种方式!(上)
2019/04/23 Javascript
uploadify插件实现多个图片上传并预览
2019/09/30 Javascript
vue a标签点击实现赋值方式
2020/09/07 Javascript
js获取图片的base64编码并压缩
2020/12/05 Javascript
Python中获取网页状态码的两个方法
2014/11/03 Python
Python的__builtin__模块中的一些要点知识
2015/05/02 Python
Python基础之getpass模块详细介绍
2017/08/10 Python
Python tkinter事件高级用法实例
2018/01/31 Python
python让列表倒序输出的实例
2018/06/25 Python
python 实现调用子文件下的模块方法
2018/12/07 Python
Python实现简单层次聚类算法以及可视化
2019/03/18 Python
python对验证码降噪的实现示例代码
2019/11/12 Python
python处理RSTP视频流过程解析
2020/01/11 Python
Python 实现黑客帝国中的字符雨的示例代码
2020/02/20 Python
Python Django2 model 查询介绍(条件、范围、模糊查询)
2020/03/16 Python
CSS3制作酷炫的条纹背景
2017/11/09 HTML / CSS
html5使用canvas画空心圆与实心圆
2014/12/15 HTML / CSS
英文翻译的自我评价语句
2013/10/04 职场文书
大学生最新职业生涯规划书范文
2014/01/12 职场文书
会计毕业自我鉴定
2014/02/05 职场文书
优秀毕业自我鉴定
2014/02/15 职场文书
幼儿园三八妇女节活动总结
2015/02/06 职场文书
端午节活动总结报告
2015/02/11 职场文书
因工资原因离职的辞职信范文
2015/05/12 职场文书
简短清晨问候语
2015/11/10 职场文书