zoukankan      html  css  js  c++  java
  • [原创] 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。

  • 相关阅读:
    LeetCode "Palindrome Partition II"
    LeetCode "Longest Substring Without Repeating Characters"
    LeetCode "Wildcard Matching"
    LeetCode "Best Time to Buy and Sell Stock II"
    LeetCodeEPI "Best Time to Buy and Sell Stock"
    LeetCode "Substring with Concatenation of All Words"
    LeetCode "Word Break II"
    LeetCode "Word Break"
    Some thoughts..
    LeetCode "Longest Valid Parentheses"
  • 原文地址:https://www.cnblogs.com/cly84920/p/4427026.html
Copyright © 2011-2022 走看看