基于OO的tab选项卡,增强了语言话和扩展性需特效可合并前面的附加插件用

基于OO的tab选项卡,加强了语言话和扩展性需特效可合并前面的附加插件用

前言:前段时间一直都好忙也就好久没有写些东西了,最近手上的事刚好告些段落了,把以前空写的写插件都拿出来分享下吧,希望对大家有些帮助,也希望有高手能帮忙指点下我的写不足和错误,一直以来自己写的东西都是在用,性能方面个人只能尽量靠近问题还很多……真心求指点;

插件简介:用于tab选项卡,这个东西网上也很多不过网上的普遍都是ul然后内容是div个人感觉这样的结构不便于语义化,而且当没有js和css 的时候整个页面就无可读性,所以重写的一个大家可以看看

使用方法:在下面的js代码里面前面写了,大家可以看看直接复制粘贴就可以用了有问题可以联系我

JS代码如下,这js代码里面有个查找class的,其实这个东西我之所以没合并进去因为查找class的本身就应该单独做个类是用,demo事例在下面

/**
 //class查找
function _class(c,o){
    var oDom = o?o:document,cParent = oDom.getElementsByTagName("*"),classAry = [],leng = cParent.length;
    while(leng--){
        var allC = cParent[leng].className,word = allC.split(" "),len=word.length;
        while(len--) word[len]==c&&classAry.push(cParent[leng])
    }
    return classAry.length==1?classAry[0]:classAry;
}
/**
 * User: liuxing
 * Date: 12-9-22
 * Time: 下午2:02
 * 用途:用于tab选项卡切换
 * 用法:传入一个对象,对象包含5个默认参数,
 * 第一个为:element tab触发的节点此参数为数组,第一个为需要查找的class类,第二个这个class类的查找范围ID
 * 第二个为:childTag 切换内容的子类容标签
 * 第三个为:parentTag 触发tab的节点
 * 第四个为:evenSort 触发事件的方式
 * 第五个为:curClass 给当前元素添加的当前类名
 */
function Tab(){this.init.apply(this,arguments);}
Tab.prototype = {
    init:function(o){
        if(Object.prototype.toString.apply(o)!=='[object Object]') return;
        this.set(o);
        var e = this.s.element,len = e.length;
        if(len>0){
            var tabArea = _class(e[0],e[1]);
            var leng = tabArea.length
            do{this.even(tabArea[leng]||tabArea)}while(leng--);
        }
    },
    set:function(o){
        this.s = {
            element:null,
            childTag:"dd",
            parentTag:"dt",
            evenSort:"mouseover",
            curClass:"cur"
        }
        for(var c in o) this.s[c] = o[c];
    },
    even:function(source){
        var _this = this;
        if(source.attachEvent){
            source.attachEvent("on"+this.s.evenSort,function(even){_this.fun(source,even)})
        }else if(source.addEventListener){
            source.addEventListener(this.s.evenSort,function(even){_this.fun(this,even)},false)
        }
    },
    fun:function(self,even){
        var e = even || window.event,target = e.target || e.srcElement,tagName,chidArea;
        while(target!=self&&tagName!=this.s.parentTag){
            tagName = target.nodeName.toLowerCase();
            tagName!=this.s.parentTag&&(target = target.parentNode);
        }
        if(tagName==this.s.parentTag){
            chidArea = self.getElementsByTagName(this.s.childTag);
            var j= 0,leng = chidArea.length,allEle = self.getElementsByTagName(target.nodeName),curIndex = this.getIndex(target,allEle);
            if(allEle.length!==leng) return;
            if(target.className.indexOf(this.s.curClass)<0){
                for(;j<leng;j++) curIndex===j?(target.className+=" "+this.s.curClass,chidArea[j].style.display="block"):(allEle[j].className=allEle[j].className.replace(this.s.curClass,""),chidArea[j].style.display="none");
            }
        }
    },
    getIndex:function(o,a){
        var len = a.length,i=0;
        for(;i<len;i++) if(o===a[i]) return i;
    }
}


html demo如下:

<!DOCTYPE html>
<html>
<head>
    <title>TAB选项卡示例</title>
    <style>
        dl,dt,dd{padding:0;margin:0;font:12px/1.3 'tahoma,geneva,sans-serif';}
        a:link,a:visited{text-decoration:none}
        .tab-bx{overflow:hidden;zoom:1;position:relative;padding-bottom:268px;width:333px}
        .tab-bx dt{position:relative;z-index:10;float:right;display:inline;height:32px;font:14px/32px 'Microsoft YaHei';color:#4d0101;padding:0 5px;cursor:pointer;}
        .tab-bx dt.cur{border:1px solid #882220;border-bottom:none;background-color:#770301;color:#ebd39d;}
        .tab-bx dd{display:none;position:absolute;left:0;top:32px;z-index:5;border:1px solid #882220;background:#4d0101;padding:14px 15px 5px;width:301px;}
        .tab-bx dd a{display:inline;float:left;width:60px;height:25px;line-height:25px;text-align:center;color:#d04343;margin-bottom:6px;overflow:hidden;}
        .tab-bx dd .cur{background-position:-104px -91px;}
    </style>
</head>
<body>
<dl class="tab-bx">
    <dt>预告</dt>
    <dd>
        <a href="#">第01集</a>
        <a href="#">第02集</a>
        <a href="#">第03集</a>
        <a href="#">第04集</a>
        <a href="#">第05集</a>
        <a href="#">第06集</a>
        <a href="#">第07集</a>
        <a href="#">第08集</a>
        <a href="#">第09集</a>
        <a href="#">第10集</a>
        <a href="#">第11集</a>
        <a href="#">第12集</a>
        <a href="#">第13集</a>
        <a href="#">第14集</a>
        <a href="#">第15集</a>
        <a href="#">第16集</a>
    </dd>
    <dt>花絮</dt>
    <dd>
        <a href="#">第01集</a>
        <a href="#">第02集</a>
        <a href="#">第03集</a>
        <a href="#">第04集</a>
        <a href="#">第05集</a>
        <a href="#">第06集</a>
        <a href="#">第07集</a>
        <a href="#">第08集</a>
        <a href="#">第09集</a>
        <a href="#">第10集</a>
        <a href="#">第11集</a>
        <a href="#">第12集</a>
    </dd>
    <dt>粤语</dt>
    <dd>
        <a href="#">第01集</a>
        <a href="#">第02集</a>
        <a href="#">第03集</a>
        <a href="#">第04集</a>
        <a href="#">第05集</a>
        <a href="#">第06集</a>
        <a href="#">第07集</a>
        <a href="#">第08集</a>
        <a href="#">第09集</a>
        <a href="#">第10集</a>
        <a href="#">第11集</a>
        <a href="#">第12集</a>
    </dd>
    <dt class="cur">国语</dt>
    <dd style="display:block;">
        <a class="cur" href="#">第01集</a>
        <a href="#">第02集</a>
        <a href="#">第03集</a>
        <a href="#">第04集</a>
        <a href="#">第05集</a>
        <a href="#">第06集</a>
        <a href="#">第07集</a>
        <a href="#">第08集</a>
        <a href="#">第09集</a>
        <a href="#">第10集</a>
        <a href="#">第11集</a>
        <a href="#">第12集</a>
    </dd>
</dl>

<dl class="tab-bx">
    <dt>预告</dt>
    <dd>
        <a href="#">第01集</a>
        <a href="#">第02集</a>
        <a href="#">第03集</a>
        <a href="#">第04集</a>
        <a href="#">第05集</a>
        <a href="#">第06集</a>
        <a href="#">第07集</a>
        <a href="#">第08集</a>
        <a href="#">第09集</a>
        <a href="#">第10集</a>
        <a href="#">第11集</a>
        <a href="#">第12集</a>
        <a href="#">第13集</a>
        <a href="#">第14集</a>
        <a href="#">第15集</a>
        <a href="#">第16集</a>
    </dd>
    <dt>花絮</dt>
    <dd>
        <a href="#">第01集</a>
        <a href="#">第02集</a>
        <a href="#">第03集</a>
        <a href="#">第04集</a>
        <a href="#">第05集</a>
        <a href="#">第06集</a>
        <a href="#">第07集</a>
        <a href="#">第08集</a>
        <a href="#">第09集</a>
        <a href="#">第10集</a>
        <a href="#">第11集</a>
        <a href="#">第12集</a>
    </dd>
    <dt>粤语</dt>
    <dd>
        <a href="#">第01集</a>
        <a href="#">第02集</a>
        <a href="#">第03集</a>
        <a href="#">第04集</a>
        <a href="#">第05集</a>
        <a href="#">第06集</a>
        <a href="#">第07集</a>
        <a href="#">第08集</a>
        <a href="#">第09集</a>
        <a href="#">第10集</a>
        <a href="#">第11集</a>
        <a href="#">第12集</a>
    </dd>
    <dt class="cur">国语</dt>
    <dd style="display:block;">
        <a class="cur" href="#">第01集</a>
        <a href="#">第02集</a>
        <a href="#">第03集</a>
        <a href="#">第04集</a>
        <a href="#">第05集</a>
        <a href="#">第06集</a>
        <a href="#">第07集</a>
        <a href="#">第08集</a>
        <a href="#">第09集</a>
        <a href="#">第10集</a>
        <a href="#">第11集</a>
        <a href="#">第12集</a>
    </dd>
</dl>
<script src="tab.source.js"></script>
<script>
    !function(){
        //tab
        var tabMenu = new Tab({element:["tab-bx"]});
        tabMenu = null;
    }();
</script>
</body>
</html>

PS:要吃饭啦,下午还有事忙今天发了几个有点偷懒了,下午就不发了以后空了继续分享些,这些质量都还不理想