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 相关文章推荐
根据分辨率不同,调用不同的css文件
Jul 07 Javascript
不同浏览器的怪癖小结
Jul 11 Javascript
Javascript之this关键字深入解析
Nov 12 Javascript
JavaScript设计模式之外观模式介绍
Dec 28 Javascript
jQuery使用hide方法隐藏元素自身用法实例
Mar 30 Javascript
浅谈JS中逗号运算符的用法
Jun 12 Javascript
Android中Okhttp3实现上传多张图片同时传递参数
Feb 18 Javascript
js实现自定义进度条效果
Mar 15 Javascript
JS中跳出循环的示例代码
Sep 14 Javascript
JS获取并处理php数组的方法实例分析
Sep 04 Javascript
微信小程序发送短信验证码完整实例
Jan 07 Javascript
基于javascript canvas实现五子棋游戏
Jul 08 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开发工具之vs2005图解
2008/01/12 PHP
php文本转图片自动换行的方法
2013/03/13 PHP
YII Framework框架教程之国际化实现方法
2016/03/14 PHP
PHP/HTML混写的四种方式总结
2017/02/27 PHP
PHP封装XML和JSON格式数据接口操作示例
2019/03/06 PHP
PHP基于session.upload_progress 实现文件上传进度显示功能详解
2019/08/09 PHP
php DES加密算法实例分析
2019/09/18 PHP
jQuery 学习 几种常用方法
2009/06/11 Javascript
基于jquery跨浏览器显示的file上传控件
2011/10/24 Javascript
怎么清空javascript数组
2013/05/11 Javascript
jQuery创建DOM元素实例解析
2015/01/19 Javascript
一览画面点击复选框后获取多个id值的方法
2016/05/30 Javascript
jQuery数据检索中根据关键字快速定位GridView指定行的实现方法
2016/06/08 Javascript
p5.js入门教程之键盘交互
2018/03/19 Javascript
vue删除html内容的标签样式实例
2018/09/13 Javascript
React如何解决fetch跨域请求时session失效问题
2018/11/02 Javascript
关于微信公众号开发无法支付的问题解决
2018/12/28 Javascript
mpvue全局引入sass文件的方法步骤
2019/03/06 Javascript
vue实现一个获取按键展示快捷键效果的Input组件
2021/01/13 Vue.js
[05:39]2014DOTA2西雅图国际邀请赛 淘汰赛7月14日TOPPLAY
2014/07/14 DOTA
Python的MongoDB模块PyMongo操作方法集锦
2016/01/05 Python
python中实现迭代器(iterator)的方法示例
2017/01/19 Python
Python查找文件中包含中文的行方法
2018/12/19 Python
flask/django 动态查询表结构相同表名不同数据的Model实现方法
2019/08/29 Python
Django-imagekit的使用详解
2020/07/06 Python
python3.8动态人脸识别的实现示例
2020/09/21 Python
scrapy-redis分布式爬虫的搭建过程(理论篇)
2020/09/29 Python
解决python3.x安装numpy成功但import出错的问题
2020/11/17 Python
CSS3实现红包抖动效果
2020/12/23 HTML / CSS
微软巴西官方网站:Microsoft Brasil
2019/09/26 全球购物
销售工作人员的自我评价分享
2013/11/10 职场文书
英语老师推荐信
2014/02/26 职场文书
2014年学生会干事工作总结
2014/11/07 职场文书
教师节校长致辞
2015/07/31 职场文书
Redis遍历所有key的两个命令(KEYS 和 SCAN)
2021/04/12 Redis
JavaScript ES6的函数拓展
2022/01/18 Javascript