1. 程式人生 > >移動端外掛-快速生成tab外掛(純手寫+親測)

移動端外掛-快速生成tab外掛(純手寫+親測)



(function (win) {
    //全域性物件
    var globalObj = {}
    //預設引數
    var defaultParame = {
        navColor: "#000",
        number: 4,
        tabName: ['標籤1','標籤2','標籤3','標籤4'],
        height: "40px",
        lineHeight: "40px",
        fontSize: "14px"
    }
    function QuickTab(requireObj) {
        requireObj = Object.assign(defaultParame,requireObj)


        this.init(requireObj)
    }
    var quickTabProtoType = {
        init: function (requireObj) {
            this.initData(requireObj)
            this.initDom()
            this.setStyle()
            this.bindEvent()
        },


        initData: function (requireObj) {
            globalObj = Object.assign({},requireObj)
            globalObj.navEl  = document.querySelector(requireObj.navEl)
            globalObj.contentEl = document.querySelector(requireObj.contentEl)
            globalObj.conSections = globalObj.contentEl.querySelectorAll("section")
        },


        initDom: function () {
            var tabNumber = globalObj.number
            var tabName = globalObj.tabName
            var container = globalObj.navEl
            var ulEle = document.createElement('ul')
            for(var i = 0;i < tabNumber;i++){
                var li = document.createElement('li')
                li.innerHTML = tabName[i]
                li.setAttribute('index',i)
                ulEle.appendChild(li)
            }


            container.appendChild(ulEle)
        },
        setStyle: function () {
            var that = this
            var container = globalObj.navEl
            var contentBox = globalObj.contentEl
            var ulEle = container.querySelector('ul')
            var lis = container.querySelectorAll('li')
            var sectionEle = contentBox.querySelectorAll('section');
            var ulHeight = globalObj.height


            var containerCss = {
                padding: 0,
                margin: 0,
                display: "flex",
                flexDirection: "column",
                color: globalObj.navColor,
                fontSize: globalObj.fontSize


            }
            var contentBoxCss = {
                flexGrow: 1
            }
            var ulEleCss = {
                padding: 0,
                margin: 0,
                overflow: "hidden",
                listStyle: "none",
                display: "flex",
                textAlign: 'center',
                height: ulHeight,
                lineHeight: ulHeight
            }
            var liEleCss = {
                padding: 0,
                margin: 0,
                flexGrow: 1,
                borderBottom: "2px solid transparent",
                cursor: "pointer"
            }
            var firstLi = {
                "borderBottom": "2px solid red"
            }


            var sectionEleCss = {
                display: "none"
            }


            this.setCss(container,containerCss)
            this.setCss(contentBox,contentBoxCss)
            this.setCss(ulEle,ulEleCss)
            lis.forEach(function (liElement) {
                that.setCss(liElement,liEleCss)
            })
            this.setCss(lis[0],firstLi) //設定第一個li標籤特殊樣式
            sectionEle.forEach(function (section) {
                that.setCss(section,sectionEleCss)
            })
            this.setCss(sectionEle[0],{display: "block"})


        },
        setCss: function (el, styleObj) {
            for(var key in styleObj){
                el.style[key] = styleObj[key]
            }
        },
        bindEvent: function () {
            var that = this
            var lis = globalObj.navEl.querySelectorAll("li")
            var sections = globalObj.conSections


            lis.forEach(function (li) {
                li.onclick = function () {
                    lis.forEach(function (li) {
                        that.setCss(li,{borderBottom:"2px solid transparent"})
                    })
                    that.setCss(this,{borderBottom: "2px solid red"})
                    var liIndex = this.getAttribute("index")


                    sections.forEach(function (section) {
                        var currentIndex = section.getAttribute('index')
                        that.setCss(section,{display: "none"})
                        if(currentIndex == liIndex){
                            that.setCss(section,{display: "block"})
                        }
                    })
                }
            })
        }
    }


    //設定建構函式的原型
    QuickTab.prototype = quickTabProtoType


    //暴露建構函式
    window.QuickTab = QuickTab
}(window))