精简的TabComponent, 几十行的东西没必要搞个几十K

前言, 虽然jQuery的tab已经做得很好了,
但作为一个代码手写者, 多少有些洁癖,
为了1,2个小功能就要在打开的网页里下载几十乃至几百K的js lib, 心里不是滋味, 想想我自身的代码才多少, 本末倒置

但jquery的风格着实不错, 就参照写了个类似的, 以备日后自己回顾


//load custom lib
<script type="tetext/javascript" src="YS_Util.tab.js"></script>

//invoke
//parameter: name of select tag, name of container tag, className of selected tag
function demo(){
$YS_Util.tab.createTab("tab_li", "tab_div", "selected");
}


其实要实现tab控件并不难, 就是几个title的选择点击, 然后下面一个容器里, 选择对应的block, 其余的none
比较花时间的是, 有个好的封装, 和漂亮的UI, 但漂亮的UI主要是靠图片, 把时间耗在JS上还不如用PS和AI


(function(){
var Tab=new Object();
$YS_Util=new Object();

$YS_Util.tab=Tab;
var li=new Array(); //save select tag
var div=new Array(); //save container div
var alterClassName; //className of selected

/**
* perform tab component in js like GUI tabcomponent
* @param tab_lbl name attribute of select button
* @param tab_div containers' name attribute
* @param className
*/
Tab.createTab=function(tab_lbl, tab_div, className){
try{
alterClassName=className;
var e=document.getElementsByName(tab_lbl);
var len=e.length;
for(var i=0;i<len;i++){
li.push(e[i]);
e[i].onclick=show;
e[i]._no=i;
}
e=document.getElementsByName(tab_div);
len=e.length;
for(var i=0;i<len;i++){
div.push(e[i]);
e[i].style.display="none";
}
//initial setting, default display 1st tag & div
li[0].className=alterClassName;
e[0].style.display="block";
}catch(err){
alert(err);
}
}
var show=function(){
try{
for(i in li){
li[i].className="";
}
li[this._no].className=alterClassName;
for(i in div){
div[i].style.display="none";
}
div[this._no].style.display="block";
}catch(err){
alert(err);
}
}
})();


html demo


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Tab Conponent Demo</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script type="text/javascript" src="YS_Util.tab.js"></script>
<style type="text/css">
#tab li
{
display: table-cell;
padding-left: 20px;
padding-right: 20px;
background-color: bisque;
cursor: pointer;
}
#tab li.selected {background-color: burlywood;}
#tab>div
{
border: solid #777 0px;
background-color: burlywood;
}
</style>
<script type="text/javascript" >
function demo(){
$YS_Util.tab.createTab("tab_li", "tab_div", "selected");
}
</script>
</head>
<body onload="demo()" >
Tab Conponent Demo<br /><br />
<div id="tab">
<li name="tab_li" >JS</li>
<li name="tab_li" >CSS</li>
<li name="tab_li" >JAVA</li>
<li name="tab_li" >SQL</li>
<div>
<br />
<div name="tab_div">jquery<br />EXT<br />regular<br /></div>
<div name="tab_div">table<br />list<br />layout<br />border<br />selector</div>
<div name="tab_div">String<br />Integer<br />Collection<br /></div>
<div name="tab_div">PL-SQL<br />T-SQL</div>
</div>
</div>
</body>
</html>


其实不一定要li+div, 用table实现也是不错的, 第一行做title, 第二行合并全部单元格做container,
对于设置标签和容器等宽很方便


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script type="text/javascript" src="YS_Util.tab.js"></script>
<style type="text/css">
table {table-layout: fixed; border-collapse: collapse; width: 400px}
table tr.title td {border: solid #777 1px; text-align: center; background-color: burlywood; cursor: pointer;}
table tr.title td.selected {border-bottom: 0px; background-color: bisque;}
table td[colspan="4"] {border: solid #777 1px; border-top: 0px; background-color: bisque;}
</style>
<script>
function demo(){
$YS_Util.tab.createTab("tab_td", "tab_div", "selected");
}
</script>
</head>
<body onload="demo()" >
TAB COMPONENT DEMO2<br /><br />
<table>
<tr class="title" >
<td name="tab_td">JS</td>
<td name="tab_td">CSS</td>
<td name="tab_td">JAVA</td>
<td name="tab_td">SQL</td>
</tr>
<tr>
<td colspan="4">
<div name="tab_div">jquery<br />EXT<br />regular<br /></div>
<div name="tab_div">table<br />list<br />layout<br />border<br />selector</div>
<div name="tab_div">String<br />Integer<br />Collection<br /></div>
<div name="tab_div">PL-SQL<br />T-SQL</div>
</td>
</tr>
</table>
</body>
</html>



效果如图, 只简单写了点CSS配色, 笔记就懒得PS了

[img]http://dl.iteye.com/upload/attachment/429914/d87147d7-5b3c-3f15-8861-2b8750941f3f.png[/img]


[img]http://dl.iteye.com/upload/attachment/429919/92fa0f6b-bff4-356c-b06a-4bd1ffe90805.png[/img]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值