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 XML数据显示为HTML一例
Dec 23 Javascript
改变隐藏的input中value值的方法
Mar 19 Javascript
node.js中的path.basename方法使用说明
Dec 09 Javascript
JS烟花背景效果实现方法
Mar 03 Javascript
Jquery动态添加输入框的方法
May 29 Javascript
JS实现的左侧竖向滑动菜单效果代码
Oct 19 Javascript
基于JavaScript实现一定时间后去执行一个函数
Dec 14 Javascript
基于javascript实现动态时钟效果
Aug 18 Javascript
微信小程序 http请求详细介绍
Oct 09 Javascript
js注册时输入合法性验证方法
Oct 21 Javascript
浅谈VueJS SSR 后端绘制内存泄漏的相关解决经验
Dec 20 Javascript
layer弹出层扩展主题的方法
Sep 11 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
Mysql的Root密码忘记,查看或修改的解决方法(图文介绍)
2013/06/14 PHP
PHP入门教程之正则表达式基本用法实例详解(正则匹配,搜索,分割等)
2016/09/11 PHP
php curl上传、下载、https登陆实现代码
2017/07/23 PHP
弹出模态框modal的实现方法及实例
2017/09/19 PHP
JavaScript与函数式编程解释
2007/04/27 Javascript
IE6与IE7中,innerHTML获取param的区别
2009/03/15 Javascript
jquery 表格分页等操作实现代码(pagedown,pageup)
2010/04/11 Javascript
JavaScript中的apply()方法和call()方法使用介绍
2012/07/25 Javascript
解决jquery中美元符号命名冲突问题
2014/01/08 Javascript
JavaScript中判断变量是数组、函数或是对象类型的方法
2015/02/25 Javascript
jQuery网页右侧广告跟随滚动代码分享
2020/04/20 Javascript
详解JS面向对象编程
2016/01/24 Javascript
详解基于angular路由的requireJs按需加载js
2017/01/20 Javascript
Angular.js实现动态加载组件详解
2017/05/28 Javascript
微信小程序点击控件修改样式实例详解
2017/07/07 Javascript
分享Bootstrap简单表格、表单、登录页面
2017/08/04 Javascript
基于Vue实现支持按周切换的日历
2020/09/24 Javascript
使用百度地图实现地图网格的示例
2018/02/06 Javascript
element ui 表格动态列显示空白bug 修复方法
2018/09/04 Javascript
vue本地打开build后生成的dist文件夹index.html问题
2019/09/04 Javascript
[44:41]Fnatic vs Liquid 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
python概率计算器实例分析
2015/03/25 Python
在Gnumeric下使用Python脚本操作表格的教程
2015/04/14 Python
Python控制Firefox方法总结
2019/06/03 Python
tensorflow tf.train.batch之数据批量读取方式
2020/01/20 Python
Selenium常见异常解析及解决方案示范
2020/04/10 Python
推荐技术人员一款Python开源库(造数据神器)
2020/07/08 Python
详解HTML5中的picture元素响应式处理图片
2018/01/03 HTML / CSS
html5中嵌入视频自动播放的问题解决
2020/05/25 HTML / CSS
最新大学生自我评价
2013/09/24 职场文书
数学与统计学院学生个人职业生涯规划书
2014/02/10 职场文书
四风问题对照检查整改措施思想报告
2014/10/05 职场文书
2014高三学生考试作弊检讨书
2014/12/14 职场文书
玄武湖导游词
2015/02/05 职场文书
幼儿园父亲节活动总结
2015/02/12 职场文书
初中美术教学反思
2016/02/17 职场文书