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 相关文章推荐
js设置function参数默认值(适合没有传参情况)
Feb 24 Javascript
在JavaScript中操作数组之map()方法的使用
Jun 09 Javascript
js实现获取当前时间是本月第几周的方法
Aug 11 Javascript
Jquery操作cookie记住用户名
Mar 29 Javascript
js自制图片放大镜功能
Jan 24 Javascript
jQuery实现简单弹窗遮罩效果
Feb 27 Javascript
超简单的Vue.js环境搭建教程
Mar 17 Javascript
jQuery鼠标移动图片上实现放大效果
Jun 25 jQuery
JavaScript递归算法生成树形菜单
Aug 15 Javascript
简易Vue评论框架的实现(父组件的实现)
Jan 08 Javascript
基于vue2.0的活动倒计时组件countdown(附源码下载)
Oct 09 Javascript
解决layui页面按钮点击无反应,也不报错的问题
Sep 29 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 中文和编码判断代码
2010/05/16 PHP
PHP 强制下载文件代码
2010/10/24 PHP
PHP获取当前页面完整URL的实现代码
2013/06/10 PHP
PHP中几个可以提高运行效率的代码写法、技巧分享
2014/08/21 PHP
php实现遍历目录并删除指定文件中指定内容
2015/01/21 PHP
Laravel5.1数据库连接、创建数据库、创建model及创建控制器的方法
2016/03/29 PHP
Thinkphp5行为使用方法汇总
2017/12/21 PHP
常用参考资料(手册)下载或者链接
2006/07/22 Javascript
潜说js对象和数组
2011/05/25 Javascript
prototype与__proto__区别详细介绍
2017/01/09 Javascript
微信小程序 实现列表项滑动显示删除按钮的功能
2017/04/13 Javascript
JavaScript实现简单的双色球(实例讲解)
2017/07/31 Javascript
Vue-router 类似Vuex实现组件化开发的示例
2017/09/15 Javascript
javascript  删除select中的所有option的实例
2017/09/17 Javascript
使用vue-router完成简单导航功能【推荐】
2018/06/28 Javascript
Vue 递归多级菜单的实例代码
2019/05/05 Javascript
vue element-ui实现input输入框金额数字添加千分位
2019/12/29 Javascript
Js视频播放器插件Video.js使用方法详解
2020/02/04 Javascript
python opencv设置摄像头分辨率以及各个参数的方法
2018/04/02 Python
python 反向输出字符串的方法
2018/07/16 Python
详解如何为eclipse安装合适版本的python插件pydev
2018/11/04 Python
从pandas一个单元格的字符串中提取字符串方式
2019/12/17 Python
Pycharm2020最新激活码|永久激活(附最新激活码和插件的详细教程)
2020/09/29 Python
pytorch加载语音类自定义数据集的方法教程
2020/11/10 Python
HTML5无刷新改变当前url的代码
2017/03/15 HTML / CSS
日本化妆品植村秀俄罗斯官方网站:Shu Uemura俄罗斯
2020/02/01 全球购物
Huda Beauty官方商店:化妆和美容产品
2020/09/05 全球购物
J2EE面试题
2016/03/14 面试题
我的求职计划书
2014/01/10 职场文书
大学生校园创业计划书
2014/02/08 职场文书
保护环境倡议书100字
2014/05/19 职场文书
小学生一分钟演讲稿
2014/08/26 职场文书
工作作风建设心得体会
2014/10/22 职场文书
工人先锋号事迹材料
2014/12/24 职场文书
关于html选择框创建占位符的问题
2021/06/09 HTML / CSS
详解Redis在SpringBoot工程中的综合应用
2021/10/16 Redis