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中各种编码解码函数的区别和注意事项
Aug 19 Javascript
node.js中的fs.chown方法使用说明
Dec 16 Javascript
Bootstrap模态对话框的简单使用
Apr 29 Javascript
js事件冒泡、事件捕获和阻止默认事件详解
Aug 04 Javascript
谈谈JavaScript中的几种借用方法
Aug 09 Javascript
详解Vue的computed(计算属性)使用实例之TodoList
Aug 07 Javascript
Vue中添加手机验证码组件功能操作方法
Dec 07 Javascript
vue组件开发之用户无限添加自定义填写表单的方法
Aug 28 Javascript
js中的深浅拷贝问题简析
May 10 Javascript
vue.js 子组件无法获取父组件store值的解决方式
Nov 08 Javascript
js实现复制粘贴的两种方法
Dec 04 Javascript
JS中多层次排序算法的实现代码
Jan 06 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命名空间设计思想、用法与缺点分析
2019/07/17 PHP
jquery实现文本框鼠标右击无效以及不能输入的代码
2010/11/05 Javascript
JavaScript中“基本类型”之争小结
2013/01/03 Javascript
JavaScript实现表格排序方法
2013/06/14 Javascript
jquery动态改变form属性提交表单
2014/06/03 Javascript
jquery实现的树形目录实例
2015/06/26 Javascript
超精准的javascript验证身份证号的具体实现方法
2015/11/18 Javascript
js添加绑定事件的方法
2016/05/15 Javascript
Angularjs过滤器使用详解
2016/05/25 Javascript
纯js仿淘宝京东商品放大镜功能
2017/03/02 Javascript
详解vue.js的devtools安装
2017/05/26 Javascript
AngularJs实现聊天列表实时刷新功能
2017/06/15 Javascript
laravel5.3 vue 实现收藏夹功能实例详解
2018/01/21 Javascript
解决vue keep-alive 数据更新的问题
2018/09/21 Javascript
Python通过websocket与js客户端通信示例分析
2014/06/25 Python
Python优先队列实现方法示例
2017/09/21 Python
Python深度优先算法生成迷宫
2018/01/22 Python
pygame游戏之旅 python和pygame安装教程
2018/11/20 Python
浅析Python 读取图像文件的性能对比
2019/03/07 Python
Python获取命令实时输出-原样彩色输出并返回输出结果的示例
2019/07/11 Python
Django如何将URL映射到视图
2019/07/29 Python
python3中eval函数用法使用简介
2019/08/02 Python
Flask框架学习笔记之使用Flask实现表单开发详解
2019/08/12 Python
python时间与Unix时间戳相互转换方法详解
2020/02/13 Python
Python使用内置函数setattr设置对象的属性值
2020/10/16 Python
scrapy在python爬虫中搭建出错的解决方法
2020/11/22 Python
基于PyTorch中view的用法说明
2021/03/03 Python
印尼穆斯林时尚购物网站:Hijabenka
2016/12/10 全球购物
eDreams澳大利亚:预订机票、酒店和度假产品
2017/04/19 全球购物
Clarks鞋澳大利亚官方网站:Clarks Australia
2019/12/25 全球购物
美国宠物护理专家:Revival Animal Health
2020/01/05 全球购物
size?法国官网:英国伦敦的球鞋精品店
2020/03/15 全球购物
2014老师三严三实对照检查材料思想汇报
2014/09/18 职场文书
人民检察院起诉书
2015/05/20 职场文书
golang中实现给gif、png、jpeg图片添加文字水印
2021/04/26 Golang
VUE解决跨域问题Access to XMLHttpRequest at
2022/05/06 Vue.js