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 相关文章推荐
利用jQuery操作对象数组的实现代码
Apr 27 Javascript
jQuery随机切换图片的小例子
Apr 18 Javascript
jquery 定位input元素的几种方法小结
Jul 28 Javascript
jtable列中自定义button示例代码
Nov 21 Javascript
Node.js中使用Buffer编码、解码二进制数据详解
Aug 16 Javascript
node.js中的fs.renameSync方法使用说明
Dec 16 Javascript
javascript实现树形菜单的方法
Jul 17 Javascript
javascript实现鼠标移到Image上方时显示文字效果的方法
Aug 07 Javascript
Node.js中process模块常用的属性和方法
Dec 13 Javascript
纯js实现画一棵树的示例
Sep 05 Javascript
Vue使用watch监听一个对象中的属性的实现方法
May 10 Javascript
layer弹出层自定义提交取消按钮的例子
Sep 10 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之CodeIgniter学习笔记
2013/06/17 PHP
Thinkphp结合ajaxFileUpload实现异步图片传输示例
2017/03/13 PHP
浅谈PHP表单提交(POST&amp;GET&amp;URL编/解码)
2017/04/03 PHP
PhpStorm 如何优雅的调试Hyperf的方法步骤
2019/11/24 PHP
PHP中mysqli_get_server_version()的实例用法
2020/02/03 PHP
关于__defineGetter__ 和__defineSetter__的说明
2007/05/12 Javascript
JQuery UI DatePicker中z-index默认为1的解决办法
2010/09/28 Javascript
Javascript面向对象编程(二) 构造函数的继承
2011/08/28 Javascript
js实现九宫格图片半透明渐显特效的方法
2015/02/16 Javascript
深入分析Javascript跨域问题
2015/04/17 Javascript
JS设置下拉列表框当前所选值的方法
2015/12/22 Javascript
探索angularjs+requirejs全面实现按需加载的套路
2016/02/26 Javascript
基于angularJS的表单验证指令介绍
2016/10/21 Javascript
用director.js实现前端路由使用实例
2017/01/27 Javascript
ES6正则的扩展实例详解
2017/04/25 Javascript
JavaScript你不知道的一些数组方法
2017/08/18 Javascript
React diff算法的实现示例
2018/04/20 Javascript
在create-react-app中使用sass的方法示例
2018/10/01 Javascript
javascript中一些奇葩的日期换算方法总结
2018/11/14 Javascript
angular中两种表单的区别(响应式和模板驱动表单)
2018/12/06 Javascript
js form表单input框限制20个字符,10个汉字代码实例
2019/04/12 Javascript
微信小程序跨页面数据传递事件响应实现过程解析
2019/12/19 Javascript
javascript实现简易数码时钟
2020/03/30 Javascript
windows下安装Python的XlsxWriter模块方法
2018/05/03 Python
Python计算一个给定时间点前一个月和后一个月第一天的方法
2018/05/29 Python
python读写csv文件方法详细总结
2019/07/05 Python
用python生成与调用cntk模型代码演示方法
2019/08/26 Python
python3 dict ndarray 存成json,并保留原数据精度的实例
2019/12/06 Python
新手常见Python错误及异常解决处理方案
2020/06/18 Python
小米俄罗斯授权商店:Xiaomi俄罗斯
2019/12/08 全球购物
会计应聘求职信范文
2013/12/17 职场文书
船舶专业个人求职信范文
2014/01/02 职场文书
红头文件任命书范本
2014/06/05 职场文书
党员教师个人对照检查材料范文
2014/09/25 职场文书
离婚协议书怎样才有法律效力
2014/10/10 职场文书
恰同学少年观后感
2015/06/08 职场文书