js學習總結----選項卡封裝

來源:互聯網
上載者:User

標籤:lis   點擊   ini   function   remove   call   efault   target   for   

這個外掛程式對應的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學習總結----選項卡封裝

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.