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>就可以使用组件了

猜你喜欢

转载自www.cnblogs.com/ninefrom/p/9792383.html