js tab控件

这两天学prototype框架,用它写了一个类似IE7.0跟firefox中tab功能类似的控件,以求可以达到重用的目的,由于css学的不大好,css还没有调试好,暂时还很丑陋。有css熟的劳烦帖上来交流。代码有些地方写的还感觉有些恶心,有待提高,在下也是初学js,大家多包含。
js 代码
  1.   
  2.   
  3. function createEle(tag)   
  4. {   
  5.  return document.createElement(tag);   
  6. }   
  7.   
  8. function createDiv(_id)   
  9. {   
  10.  var bgDiv = createEle("DIV");   
  11.  bgDiv.id = _id;   
  12.  return bgDiv;   
  13. }   
  14.   
  15. TabContainer = Class.create();   
  16. TabContainer.id = "__container_id__";   
  17. TabContainer.itemContainerDivId = "__item_container_Div_id__";   
  18. TabContainer.itemContainerId = "__item_container_id__";   
  19. TabContainer.contentContainerId = "__content_container_id__";   
  20. TabContainer.prototype = {   
  21.     /*---------------- initializer ------------------*/  
  22.  initialize : function(_initTab,_options)   
  23.  {   
  24.   this.Tabs = new Array();   
  25.   this.initTab = _initTab;   
  26.   this.options =    
  27.   {   
  28.    container             : document.body,   
  29.    maxTabs               : 3,   
  30.    tabContainerClass     : "tab-container",   
  31.    itemContainerClass    : "item-container",   
  32.    itemContainerOLClass  : "item-container-ol",   
  33.    contentContainerClass : "content-container"  
  34.   };   
  35.   this.init(this._options);    
  36.  },   
  37.     
  38.  /*-----------------  private method -----------------------*/  
  39.  init : function(_options)   
  40.  {   
  41.   this.setOptions(_options);   
  42.   this.createTabContainer();   
  43.   this.addTab(this.initTab);   
  44.   Event.observe($(TabContainer.itemContainerId), "click"this.clickHandler.bind(this), true);   
  45.   Event.observe($(TabContainer.itemContainerId), "dblclick"this.dblclickHandler.bind(this), true);   
  46.  },   
  47.     
  48.  createTabContainer : function()   
  49.  {   
  50.   var tabContainer = createDiv(TabContainer.id);   
  51.      tabContainer.className = this.options.tabContainerClass;   
  52.      tabContainer.appendChild(this.createTabItemContainer());   
  53.      tabContainer.appendChild(this.createTabContentContainer());   
  54.      this.options.container.appendChild(tabContainer);   
  55.  },   
  56.     
  57.  createTabItemContainer : function()   
  58.  {   
  59.   var itemContainer = createDiv(TabContainer.itemContainerDivId);   
  60.   itemContainer.className = this.options.itemContainerClass;   
  61.   var itemContainerOL = createEle("ul");   
  62.   itemContainerOL.id = TabContainer.itemContainerId;   
  63.   itemContainerOL.className = this.options.itemContainerOLClass;   
  64.   itemContainer.appendChild(itemContainerOL);   
  65.   return itemContainer;   
  66.  },   
  67.     
  68.  createTabContentContainer : function()   
  69.  {   
  70.   var contentContainer = createDiv(TabContainer.contentContainerId);   
  71.   contentContainer.className = this.options.contentContainerClass;   
  72.   return contentContainer;   
  73.  },   
  74.     
  75.  setOptions : function(_options)   
  76.  {   
  77.   this.options.extend(_options||{});   
  78.   this.options.container = $(this.options.container);   
  79.  },   
  80.     
  81.  addTab : function(_tab)   
  82.  {   
  83.   if(this.Tabs.length  {   
  84.    $(TabContainer.itemContainerId).appendChild(_tab.tabItem);;   
  85.    $(TabContainer.contentContainerId).appendChild(_tab.tabContent);   
  86.       this.Tabs[this.Tabs.length] = _tab;   
  87.       _tab.show();   
  88.       alert(_tab.options.addCallBack);   
  89.       if(_tab.options.addCallBack)   
  90.     _tab.options.addCallBack();   
  91.   }   
  92.  },   
  93.     
  94.  removeTab : function(_tabId)   
  95.  {   
  96.   if(this.Tabs.length>1)   
  97.   {   
  98.    for(var i=0;i   {   
  99.     if(this.Tabs[i].tabId==_tabId)   
  100.     {   
  101.      $(TabContainer.itemContainerId).removeChild(this.Tabs[i].tabItem);   
  102.            $(TabContainer.contentContainerId).removeChild(this.Tabs[i].tabContent);   
  103.      if(this.Tabs[i].options.removeCallBack)   
  104.          this.Tabs[i].options.removeCallBack();   
  105.      this.Tabs.splice(i,1);   
  106.      if(i=this.Tabs.length-1)    
  107.      {   
  108.       this.Tabs[i-1].show();   
  109.      }   
  110.      else  
  111.      {   
  112.       this.Tabs[i].show();   
  113.      }   
  114.     }   
  115.    }   
  116.   }   
  117.  },   
  118.     
  119.  showTab: function(_tabId)   
  120.  {   
  121.   for(var i=0;i  {   
  122.    if(this.Tabs[i].tabId==_tabId)   
  123.    {   
  124.     this.Tabs[i].show();   
  125.     this.Tabs[i].tabItem.style.backgroundColor = "EEEEEE";   
  126.     this.Tabs[i].tabItem.setColor = true;   
  127.    }   
  128.    else  
  129.    {   
  130.     this.Tabs[i].hide();   
  131.     this.Tabs[i].tabItem.setColor = false;   
  132.    }   
  133.   }   
  134.  },   
  135.     
  136.  clickHandler : function(evnt)   
  137.  {   
  138.   var srcEle = Event.element(evnt);   
  139.   var regxValue = /^\w+_item$/;   
  140.   if(regxValue.test(srcEle.id))   
  141.   {   
  142.    this.showTab(srcEle.id.substr(0,srcEle.id.length-5))   
  143.   }   
  144.  },   
  145.     
  146.  dblclickHandler : function(evnt)   
  147.  {   
  148.   var srcEle = Event.element(evnt);   
  149.   var regxValue = /^\w+_item$/;   
  150.   if(regxValue.test(srcEle.id))   
  151.   {   
  152.    this.removeTab(srcEle.id.substr(0,srcEle.id.length-5))   
  153.   }   
  154.  }   
  155. }   
  156.   
  157. Tab = Class.create();   
  158. Tab.prototype = {   
  159.  /*---------------- initializer ------------------*/  
  160.  initialize : function(_tabId,_tabItemValue,_tabContentValue,_options)   
  161.  {   
  162.   this.tabId = _tabId;   
  163.   this.Tabs = new Array();   
  164.   this.tabItem = null;   
  165.   this.tabContent = null;   
  166.   this.tabItemValue = _tabItemValue;   
  167.   this.tabContentValue = _tabContentValue;   
  168.   this.options =    
  169.   {   
  170.    itemClass             : "tab-item",   
  171.    itemContentClass      : "tab-content",   
  172.    addCallBack       : null,   
  173.    removeCallBack         : null  
  174.   };   
  175.   this.init(this._options);   
  176.  },   
  177.     
  178.  /*-----------------  private method -----------------------*/  
  179.  init : function(_options)   
  180.  {   
  181.   this.setOptions(_options);   
  182.   this.createTabItem();   
  183.   this.createTabContent();   
  184.   Event.observe(this.tabItem, "mouseover"this.mouseOverHandler, true);   
  185.   Event.observe(this.tabItem, "mouseout"this.mouseOutHandler, true);   
  186.  },   
  187.     
  188.  setOptions : function(_options)   
  189.  {   
  190.   this.options.extend(_options||{});   
  191.  },   
  192.     
  193.  createTabItem : function()   
  194.  {   
  195.   var _tabItem = createEle("li");   
  196.   _tabItem.id = this.tabId+"_item";   
  197.   _tabItem.className = this.options.itemClass;   
  198.   _tabItem.innerHTML = this.tabItemValue;   
  199.   this.tabItem = _tabItem;   
  200.  },   
  201.     
  202.  createTabContent : function()   
  203.  {   
  204.   var _itemContent = createDiv(this.tabId+"_content");   
  205.   _itemContent.className = this.options.itemContentClass;   
  206.   _itemContent.innerHTML = this.tabContentValue;   
  207.   this.tabContent = _itemContent;   
  208.  },   
  209.     
  210.  show : function()   
  211.  {   
  212.     
  213.   this.tabContent.style.display = "block";   
  214.  },   
  215.     
  216.  hide : function()   
  217.  {   
  218.   this.tabItem.style.backgroundColor = "FFFFFF";   
  219.   this.tabContent.style.display = "none";   
  220.  },   
  221.     
  222.  mouseOverHandler : function(evnt)   
  223.  {   
  224.   var srcEle = Event.element(evnt);   
  225.   srcEle.style.backgroundColor = "EEEEEF";   
  226.  },   
  227.     
  228.  mouseOutHandler : function(evnt)   
  229.  {   
  230.   var srcEle = Event.element(evnt);   
  231.   if(srcEle.setColor!=true)   
  232.       srcEle.style.backgroundColor = "FFFFFF";   
  233.  }   
  234. }   
  235.   

你可能感兴趣的:(框架,css,prototype,firefox)