• [原创] tab选项卡


    写tab选项卡,主要可以分两种思路,一种是通过约定html结构,绑定class,然后通过一个js就实现页面内所有的tab。另一种是需要不约定html结构,只通过传id来给tab类来实现。我觉得后一种方式更灵活,虽然缺点是需要为每个tab去实例化一次类,好在问题不算大。用原生js写了个通用的tab类,如下:

    ========================
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>阿当制作</title>
    </head>
    <style type="text/css">
         .hidden{display:none;}
         .select{color:red;}
         .select2{color:green;}
    </style>
    <body>
    <div><a href="#" id="t1" class="select">tab1</a> <a href="#" id="t2">tab2</a> <a href="#" id="t3">tab3</a></div>
    <div>
         <div id="c1">111111111</div>
         <div id="c2" class="hidden">222222222</div>
         <div id="c3" class="hidden">333333333</div>
    </div>
    <br />
    <br />
    <br />
    <br />
    <br />
    <div><a href="#" id="t4" class="select2">tab4</a> <a href="#" id="t5">tab5</a></div>
    <div>
         <div id="c4">444444444444</div>
         <div id="c5" class="hidden">5555555555555</div>
    </div>
    <br />
    <br />
    <br />
    <br />
    <br />
    <div><a href="#" id="t6" class="select">tab6</a> <a href="#" id="t7">tab7</a> <a href="#" id="t8">tab8</a></div>
    <div>
         <div id="c6">6666666666</div>
         <div id="c7" class="hidden">777777777777</div>
         <div id="c8" class="hidden">8888888888888</div>
    </div>
    <br />
    <br />
    <br />
    <br />
    <br />
    <div><a href="#" id="t9" class="select2">tab9</a> <a href="#" id="t10">tab10</a></div>
    <div>
         <div id="c9">999999999999999</div>
         <div id="c10" class="hidden">101010101010101010</div>
    </div>
    <script type="text/javascript">
    function Tab(itemList,config){
         if(config){
             var activeClass = config.activeClass || "selected";
             var act = config.act || "mouseover";
         } else {
             var activeClass = "selected";
             var act = "mouseover";
         }
         this.index = 0;
         this.labelList = [];
         this.contentList = [];
         this.count = itemList.length;
         var scope = this;
         var handler = function(){
             scope.activeHandle(this,scope,activeClass);
         }
         for(var i=0,n=this.count;i<n;i++){
             var label = this.$(itemList[i].label);
             var content = this.$(itemList[i].content);
             label.index = content.index = i;
             this.labelList.push(label);    
             this.contentList.push(content);
             if(act == "mouseover"){    
                 label.onmouseover = handler;
             } else if(act == "click") {    
                 label.onclick = handler;;
             }
         }
         if(config.auto){
              var oTime = config.time || 3000;
              setInterval(function(){
                   scope.index++;
                   if(scope.index >= scope.count){
                        scope.index = 0;
                   }
                   scope.showContent(scope.index,activeClass);
              },oTime);
         }
    }
    Tab.prototype = {
         $ : function(id){
             return document.getElementById(id);
         },
         activeHandle:function(target,scope,activeClass){
             var index = target.index;
             var str = activeClass;
              scope.index = index;
             scope.showContent.call(scope,index,str);
         },
         showContent:function(index,str){
             for(var i=0,n=this.labelList.length;i<n;i++){
                 if(this.labelList[i].className.indexOf(str)!=-1){    
                     this.labelList[i].className = this.labelList[i].className.split(str).join("");
                     this.contentList[i].style.display = "none";
                 }
             }
             this.labelList[index].className = this.labelList[index].className + " " + str;
             this.contentList[index].style.display = "block";
         }    
    }

    new Tab([{label:"t1",content:"c1"},{label:"t2",content:"c2"},{label:"t3",content:"c3"}],{activeClass:"select"});
    new Tab([{label:"t4",content:"c4"},{label:"t5",content:"c5"}],{activeClass:"select2",act:"click"});
    new Tab([{label:"t6",content:"c6"},{label:"t7",content:"c7"},{label:"t8",content:"c8"}],{activeClass:"select",auto:true});
    new Tab([{label:"t9",content:"c9"},{label:"t10",content:"c10"}],{activeClass:"select2",act:"click",auto:true,time:8000});
    </script>
    </body>
    </html>


    ================================
    功能说明:

    Tab类,有两个构造参数,第一个参数是数组类型,里面是{labe:"",content:""}的json对象,label对应的是tab的标签,content是tab相应的内容,第二个参数是配置对象,是可选的,有四个参数,第一个是activeClass,用于设置当前激活tab的标签的class名,第二个是act,用于说明tab的触发条件,可以是"click",或者"mouseover",默认是mouseover,第三个是auto,设置是否自动切换,可选,默认是false,如果设置为true还可以设置第四个参数time,用于设置自动切换的间隔时间,可选,单位为微秒,默认为3000。

  • 相关阅读:
    linux开机自动挂载NTFS-WINDOWS分区
    s3c6410学习笔记-烧写uboot+构建文件系统
    C++静态库与动态库(简介)
    linux下gmplayer安装(亲测OK!)
    得到IP包的数据意义(简单实现例子)
    IP校验和
    汇编三个数选最大
    单链表练习
    汇编写下strcpy
    排序好后写入文件
  • 原文地址:https://www.cnblogs.com/cly84920/p/4427025.html
Copyright © 2020-2023  润新知