国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

js學習總結_選項卡封裝(實例講解)

2019-11-19 16:05:41
字體:
來源:轉載
供稿:網友

這個插件對應的html的結構如下

<div class='box' id='tabFir'>    <ul id='tabOptions'>      <li class='select'>頁卡一</li>      <li>頁卡二</li>      <li>頁卡三</li>    </ul>    <div class='select'>      <div>1</div>      <div>2</div>      <div>3</div>      <div>4</div>    </div>    <div>內容二</div>    <div>內容三</div>  </div>

版本1

//實現一個選項卡封裝:我們可以分析出,只要多個選項卡的主體結構一樣,那么每個實現的思想都是一樣的,唯一不一樣的就是最外層的盒子不一樣~function(){  /*    tabChange:封裝一個選項卡的插件,只要大結構保持統一,以后實現選項卡的功能,只需要調取這個方法執行即可實現    param:container當前要實現選項卡的這個容器        defaultIndex:默認選中項的索引  */  function tabChange(container,defaultIndex){    var tabFirst = utils.firstChild(container),oLis = utils.children(tabFirst);    var divList = utils.children(container,"div");    //讓defaultIndex對應的頁卡有選中的樣式    defaultIndex = defaultIndex || 0;    utils.addClass(oLis[defaultIndex],"select");    utils.addClass(divList[defaultIndex],"select");    //具體的切換功能    for(var i = 0;i<oLis.length;i++){      oLis[i].onclick = function(){        utils.addClass(this,"select");        var curSiblings = utils.siblings(this);        for(var i = 0;i<curSiblings.length;i++){          utils.removeClass(curSiblings[i],"select")        }        var index = utils.index(this);        for(var i = 0;i<divList.length;i++){          i===index ? utils.addClass(divList[i],"select") : utils.removeClass(divList[i],"select")        }      }      }      }  window.fTab = tabChange  }()

版本2(將for循環改為使用事件委托的方式)

//實現一個選項卡封裝:我們可以分析出,只要多個選項卡的主體結構一樣,那么每個實現的思想都是一樣的,唯一不一樣的就是最外層的盒子不一樣~function(){  /*    tabChange:封裝一個選項卡的插件,只要大結構保持統一,以后實現選項卡的功能,只需要調取這個方法執行即可實現    param:container當前要實現選項卡的這個容器        defaultIndex:默認選中項的索引  */  function tabChange(container,defaultIndex){    var tabFirst = utils.firstChild(container),oLis = utils.children(tabFirst);    var divList = utils.children(container,"div");    //讓defaultIndex對應的頁卡有選中的樣式    defaultIndex = defaultIndex || 0;    utils.addClass(oLis[defaultIndex],"select");    utils.addClass(divList[defaultIndex],"select");    //具體的切換功能        //使用事件委托優化    tabFirst.onclick = function(e){      e = e || window.event;      e.target = e.target || e.srcElement;      if(e.target.tagName.toLowercase()==="li"){//說明當前點擊的是li標簽        detailFn.call(e.target,oLis,divList);      }    }  }  function detailFn(oLis,divList){    var index = utils.index(this);    utils.addClass(this,"select");    for(var i = 0;i<oLis.length;i++){      i!==index?utils.removeClass(oLis[i],"select"):null;      i===index ? utils.addClass(divList[i],"select") : utils.removeClass(divList[i],"select");    }  }  window.fTab = tabChange  }()

版本3:面向對象的方式,使用構造函數

//實現一個選項卡封裝:我們可以分析出,只要多個選項卡的主體結構一樣,那么每個實現的思想都是一樣的,唯一不一樣的就是最外層的盒子不一樣~function(){  /*    tabChange:封裝一個選項卡的插件,只要大結構保持統一,以后實現選項卡的功能,只需要調取這個方法執行即可實現    param:container當前要實現選項卡的這個容器        defaultIndex:默認選中項的索引  */  function TabChange(container,defaultIndex){    this.init(container,defaultIndex);  }  TabChange.prototype = {    constructor:TabChange,//注意重寫原型方法,需要重新指定構造器    //初始化 ,也是當前插件的唯一入口    init:function(container,defaultIndex){      this.container = container || null;      this.defaultIndex = defaultIndex || 0;      this.tabFirst = utils.firstChild(this.container);      this.oLis = utils.children(this.tabFirst);      this.divList = utils.children(this.container,"div");      this.defaultIndexEven();      this.liveClick();      return this;    },    //事件委托實現綁定切換    liveClick:function(){      var _this = this;      this.tabFirst.onclick = function(e){        e = e || window.event;        e.target = e.target || e.srcElement;        if(e.target.tagName.toLowercase()==="li"){//說明當前點擊的是li標簽          _this.detailFn(e.target);        }      }    },    detailFn:function(curEle){      var index = utils.index(curEle);      utils.addClass(curEle,"select");      for(var i = 0;i<this.oLis.length;i++){        i!==index?utils.removeClass(this.oLis[i],"select"):null;        i===index ? utils.addClass(this.divList[i],"select") : utils.removeClass(this.divList[i],"select");      }    },    //按照索引來設置默認選中的頁卡    defaultIndexEven:function(){      utils.addClass(this.oLis[this.defaultIndex],"select");      utils.addClass(this.divList[this.defaultIndex],"select");    }  }  window.fTab = TabChange  }()//使用var box1 = new fTab(boxList[0],0)

以上這篇js學習總結_選項卡封裝(實例講解)就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 封丘县| 平乐县| 乐亭县| 台前县| 明光市| 临江市| 垫江县| 临桂县| 白水县| 新泰市| 枝江市| 河池市| 鹤山市| 确山县| 霍邱县| 敖汉旗| 凤翔县| 博罗县| 尚志市| 法库县| 明星| 绩溪县| 吴桥县| 望城县| 彭阳县| 遂平县| 兴安县| 若尔盖县| 石柱| 高碑店市| 枣强县| 永宁县| 达尔| 遵义市| 崇义县| 阳泉市| 湘潭市| 盐边县| 于田县| 永年县| 盐池县|