js实现简单的可切换选项卡效果


Posted in Javascript onApril 10, 2015

本文实例讲述了js实现简单的可切换选项卡效果的方法。分享给大家供大家参考。具体如下:

如图,最简单的纯粹的选项卡

js实现简单的可切换选项卡效果

第一步,当然是先写html代码和css样式

<!DOCTYPE html>
<html>
<head>
<meta charset="gb2312" />
<title>无标题文档</title>
<style>
body,ul,li{margin:0; padding:0; font:12px/1.5 arial;}
ul,li{list-style:none;}
.wrap{width:500px; margin:20px auto;}
.hide{display:none;}
#tab_t{height:25px;border-bottom:1px solid #ccc;}
#tab_t li{float:left; width:80px; height:24px;
line-height:24px; margin:0 4px; text-align:center;
border:1px solid #ccc; border-bottom:none;
background:#f5f5f5; cursor:pointer}
#tab_t .act{ position:relative; height:25px;
margin-bottom:-1px; background:#fff;}
#tab_c{border:1px solid #ccc;
border-top:none; padding:20px;}
</style>
</head>
<body>
<div class="wrap">
 <ul id="tab_t">
 <li class="act">选择1</li>
 <li>选择2</li>
 <li>选择3</li>
 <li>选择4</li>
 </ul>
 <div id="tab_c">
 <div>内容1</div>
 <div class="hide">内容2</div>
 <div class="hide">内容3</div>
 <div class="hide">内容4</div>
 </div>
</div> 
</body>
</html>

第二步,实现简单的切换效果

要点1:

abc.document.getElementsByTagName("li")

取得abc下面的所有标签为li的元素,返回的是一个元素集合,有数组的一些属性。

要点2:循环,先循环给li加上onclick事件,再onlink事件点击的时候,再循环让所有选项卡的act样式去掉,所有的内容隐藏。然后让所点击的选项及对应内容显示。
要点3:

tab_t_li[i].index = i;

在循环时,给选项卡加一个额外的属性并赋值,以做选项卡和内容的对应。

<!DOCTYPE html>
<html>
<head>
<meta charset="gb2312" />
<title>无标题文档</title>
<style>
body,ul,li{margin:0; padding:0; font:12px/1.5 arial;}
ul,li{list-style:none;}
.wrap{width:500px; margin:20px auto;}
.hide{display:none;}
#tab_t{
height:25px;
border-bottom:1px solid #ccc;
}
#tab_t li{
float:left;
width:80px;
height:24px;
line-height:24px;
margin:0 4px;
text-align:center;
border:1px solid #ccc;
border-bottom:none;
background:#f5f5f5;
cursor:pointer
}
#tab_t .act{
position:relative;
height:25px;
margin-bottom:-1px;
background:#fff;
}
#tab_c{
border:1px solid #ccc;
border-top:none;
padding:20px;
}
</style>
<script>
window.onload = function(){
 var tab_t = document.getElementById("tab_t");
 var tab_t_li = tab_t.getElementsByTagName("li");
 var tab_c = document.getElementById("tab_c");
 var tab_c_li = tab_c.getElementsByTagName("div");
 var len = tab_t_li.length;
 var i=0;
 for(i=0; i<len; i++){
  tab_t_li[i].index = i;
  tab_t_li[i].onclick = function(){
   for(i=0; i<len; i++){
    tab_t_li[i].className = '';
    tab_c_li[i].className = 'hide';
   }
   tab_t_li[this.index].className = 'act';
   tab_c_li[this.index].className = '';
  }
 }
}
</script>
</head>
<body>
<div class="wrap">
 <ul id="tab_t">
 <li class="act">选择1</li>
 <li>选择2</li>
 <li>选择3</li>
 <li>选择4</li>
 </ul>
 <div id="tab_c">
 <div>内容1</div>
 <div class="hide">内容2</div>
 <div class="hide">内容3</div>
 <div class="hide">内容4</div>
 </div>
</div> 
</body>
</html>

第三步,写成函数。上面的写法只能一个页面用一个选项卡,如果再加一个的话,就需要复制一份,再改很多变量名。

要点:tab_t_li[i][evt] 因为传值的时候是字符串,如果直接写的话就是tab_t_li[i]."onclick"这样话是执行不了的,tab_t_li["onclick"]这样执行没问题。

好了,现在一个页面上就可以有多个切换了,只需要调用函数的时候,写上相应的id名和标签名,事件名称就可以了

<!DOCTYPE html>
<html>
<head>
<meta charset="gb2312" />
<title>无标题文档</title>
<style>
body,ul,li{margin:0; padding:0; font:12px/1.5 arial;}
ul,li{list-style:none;}
.wrap{width:500px; margin:20px auto;}
.hide{display:none;}
#tab_t{
height:25px;
border-bottom:1px solid #ccc;
}
#tab_t li{
float:left;
width:80px;
height:24px;
line-height:24px;
margin:0 4px;
text-align:center;
border:1px solid #ccc;
border-bottom:none;
background:#f5f5f5;
cursor:pointer
}
#tab_t .act{
position:relative;
height:25px;
margin-bottom:-1px;
background:#fff;
}
#tab_c{
border:1px solid #ccc;
border-top:none;
padding:20px;
}
</style>
<script>
window.onload = function(){
 tab("tab_t","li","tab_c","div","onmouseover")
 function tab(tab_t,tab_t_tag,tab_c,tag_c_tag,evt){
  var tab_t = document.getElementById(tab_t);
  var tab_t_li = tab_t.getElementsByTagName(tab_t_tag);
  var tab_c = document.getElementById(tab_c);
  var tab_c_li = tab_c.getElementsByTagName(tag_c_tag);
  var len = tab_t_li.length;
  var i=0;
  for(i=0; i<len; i++){
   tab_t_li[i].index = i;
   tab_t_li[i][evt] = function(){
    for(i=0; i<len; i++){
     tab_t_li[i].className = '';
     tab_c_li[i].className = 'hide';
    }
    tab_t_li[this.index].className = 'act';
    tab_c_li[this.index].className = '';
   }
  }
 }
}
</script>
</head>
<body>
<div class="wrap">
 <ul id="tab_t">
 <li class="act">选择1</li>
 <li>选择2</li>
 <li>选择3</li>
 <li>选择4</li>
 </ul>
 <div id="tab_c">
 <div>内容1</div>
 <div class="hide">内容2</div>
 <div class="hide">内容3</div>
 <div class="hide">内容4</div>
 </div>
</div> 
</body>
</html>

希望本文所述对大家的javascript程序设计有所帮助。

Javascript 相关文章推荐
基于js与flash实现的网站flv视频播放插件代码
Oct 14 Javascript
基于jQuery实现二级下拉菜单效果
Feb 01 Javascript
Javascript的动态增加类的实现方法
Oct 20 Javascript
easyui combotree加载静态数据问题(选不上)解决方法
Dec 26 Javascript
深入对Vue.js $watch方法的理解
Mar 20 Javascript
Webpack常见静态资源处理-模块加载器(Loaders)+ExtractTextPlugin插件
Jun 29 Javascript
浅谈webpack4.x 入门(一篇足矣)
Sep 05 Javascript
jQuery 操作 HTML 元素和属性的方法
Nov 12 jQuery
一些你可能不熟悉的JS知识点总结
Mar 15 Javascript
关于AngularJS中几种Providers的区别总结
May 17 Javascript
详解ES6中class的实现原理
Oct 03 Javascript
vue封装数字翻牌器
Apr 20 Vue.js
js使用DOM操作实现简单留言板的方法
Apr 10 #Javascript
js实现简单鼠标跟随效果的方法
Apr 10 #Javascript
js实现交换运动效果的方法
Apr 10 #Javascript
js实现简单的左右两边固定广告效果实例
Apr 10 #Javascript
javascript实现简单的鼠标拖动效果实例
Apr 10 #Javascript
js简单实现点击左右运动的方法
Apr 10 #Javascript
js实现透明度渐变效果的方法
Apr 10 #Javascript
You might like
PHP中将数组转成XML格式的实现代码
2011/08/08 PHP
深入分析php中接口与抽象类的区别
2013/06/08 PHP
Codeigniter+PHPExcel实现导出数据到Excel文件
2014/06/12 PHP
php面象对象数据库操作类实例
2014/12/02 PHP
PHP封装的MSSql操作类完整实例
2016/05/26 PHP
tp5(thinkPHP5)框架实现多数据库查询的方法
2019/01/10 PHP
Yii 框架使用数据库(databases)的方法示例
2020/05/19 PHP
转一个日期输入控件,支持FF
2007/04/27 Javascript
jquery 漂亮的删除确认和提交无刷新删除示例
2013/11/13 Javascript
使用POST方式弹出窗口的两种方法示例介绍
2014/01/29 Javascript
js获取浏览器基本信息大全
2014/11/27 Javascript
JS+CSS实现仿触屏手机拨号盘界面及功能模拟完整实例
2015/05/16 Javascript
微信小程序加载更多 点击查看更多
2016/11/29 Javascript
详解js访问对象的属性和方法
2018/10/25 Javascript
nodejs中方法和模块用法示例
2018/12/24 NodeJs
React精髓!一篇全概括小结(急速)
2019/05/23 Javascript
JavaScript设计模式之门面模式原理与实现方法分析
2020/03/09 Javascript
[02:06]DOTA2英雄基础教程 暗影萨满
2013/12/16 DOTA
[01:00:53]OG vs IG 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
python使用WMI检测windows系统信息、硬盘信息、网卡信息的方法
2015/05/15 Python
PyCharm设置SSH远程调试的方法
2018/07/17 Python
Python中return self的用法详解
2018/07/27 Python
python实现烟花小程序
2019/01/30 Python
python hashlib加密实现代码
2019/10/17 Python
用python的turtle模块实现给女票画个小心心
2019/11/23 Python
Docker部署Python爬虫项目的方法步骤
2020/01/19 Python
Python 文件数据读写的具体实现
2020/01/24 Python
Keras自定义IOU方式
2020/06/10 Python
CHARLES & KEITH台湾官网:新加坡时尚品牌
2019/07/30 全球购物
《骆驼和羊》教学反思
2014/02/27 职场文书
领导班子遵守党的政治纪律情况对照检查材料
2014/09/26 职场文书
会议通知格式范文
2015/04/15 职场文书
综治目标管理责任书
2015/05/11 职场文书
2015年加油站站长工作总结
2015/05/27 职场文书
python中opencv实现图片文本倾斜校正
2021/06/11 Python
高并发下Redis如何保持数据一致性(避免读后写)
2022/03/18 Redis