Js原生封裝選項卡組件


class MyTab extends HTMLElement{  //創建一個類名MyTab
    constructor(){ //構造函數
        super();  //指向父類構造函數,必須要有的

        const shadow = this.attachShadow({ //影子dom
            mode : 'open' //開放的封裝模式
        })

        let n = 0;
        let titles = ['標題1','標題2','標題3'];
        let inners = ['內容1','內容2','內容3'];

        for(let i=0;i<3;i++){
            let button = document.createElement('button');
            button.innerHTML = titles[i];

            if(i == n){
                button.classList.add('active');
            }

            button.onclick = function () {
                let aButton = shadow.querySelectorAll('button');
                let aP = shadow.querySelectorAll('p');

                for(let i=0;i<3;i++){
                    aButton[i].classList.remove('active');
                    aP[i].classList.remove('active');
                }
                this.classList.add('active');
                aP[i].classList.add('active');
            }

            shadow.appendChild(button);
        }

        for(let i=0;i<3;i++){
            let p = document.createElement('p');
            p.innerHTML = inners[i];

            if(i == n){
                p.classList.add('active');
            }

            shadow.appendChild(p);
        }

        const style = document.createElement('style');

        style.textContent = `
                button.active{
                    background : yellow;
                }
                p{
                    display:none;
                }
                p.active{
                    display:block;
                }
            `;

        shadow.appendChild(style);

        let div = document.createElement('div'); //插槽
        div.innerHTML = '<slot></slot>';

        shadow.appendChild(div);

    }
}

customElements.define('my-tab',MyTab); //注冊組件

 

然后在html文件里面寫入<my-tab></my-tab>就可以使用組件了


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM