前端机试题

要求:

1、当一级标题超过两个,请展示查看剩余标题”。点击“查看剩余标题,显示隐藏的其他一级标题;

2、点击一级标题或右侧向下箭头,展开二级标题。当二级标题超过两个时,展示查看剩余二级标题”。点击查看剩余二级标题,展开其它隐藏的二级标题。

3、点击二级标题右侧的弹窗按钮,在页面中心弹出一个区块和一个蒙层,区块中展示当前按钮所在一级标题和二级标题的index。点击蒙层,隐藏蒙层和区块。

HTML代码如下:

    <div class="content">
        <header>区块标题</header>
        <ul class="title-list">
            <li>
                <span class="first-title">一级标题</span>
                一级标题说明
                <span class="icon">></span>
                <ul class="sec-list">
                    <li>
                        <div class="left">
                            <p class="sec-item-title">二级标题</p>
                            <p>二级标题</p>
                            <p>标签 标签</p>
                        </div>
                        <div class="right">
                            <button>弹窗</button>
                        </div>
                    </li>
                    <li>
                        <div class="left">
                            <p class="sec-item-title">二级标题</p>
                            <p>二级标题</p>
                            <p>标签 标签</p>
                        </div>
                        <div class="right">
                            <button>弹窗</button>
                        </div>
                    </li>
                    <li>
                        <div class="left">
                            <p class="sec-item-title">二级标题</p>
                            <p>二级标题</p>
                            <p>标签 标签</p>
                        </div>
                        <div class="right">
                            <button>弹窗</button>
                        </div>
                    </li>
                    <li>
                        <div class="left">
                            <p class="sec-item-title">二级标题</p>
                            <p>二级标题</p>
                            <p>标签 标签</p>
                        </div>
                        <div class="right">
                            <button>弹窗</button>
                        </div>
                    </li>
                    <div class="sec-bottom">查看剩余标题</div>
                </ul>
            </li>
            <li><span class="first-title">一级标题</span>一级标题说明<span class="icon">></span></span>
                <ul class="sec-list">
                    <li>
                        <div class="left">
                            <p class="sec-item-title">二级标题</p>
                            <p>二级标题</p>
                            <p>标签 标签</p>
                        </div>
                        <div class="right">
                            <button>弹窗</button>
                        </div>
                    </li>
                    <li>
                        <div class="left">
                            <p class="sec-item-title">二级标题</p>
                            <p>二级标题</p>
                            <p>标签 标签</p>
                        </div>
                        <div class="right">
                            <button>弹窗</button>
                        </div>
                    </li>
                    <div class="sec-bottom">查看剩余标题</div>
                </ul>
            </li>
            <li><span class="first-title">一级标题</span>一级标题说明<span class="icon">></span></span>
                <ul class="sec-list">
                    <li>
                        <div class="left">
                            <p class="sec-item-title">二级标题</p>
                            <p>二级标题</p>
                            <p>标签 标签</p>
                        </div>
                        <div class="right">
                            <button>弹窗</button>
                        </div>
                    </li>
                    <li>
                        <div class="left">
                            <p class="sec-item-title">二级标题</p>
                            <p>二级标题</p>
                            <p>标签 标签</p>
                        </div>
                        <div class="right">
                            <button>弹窗</button>
                        </div>
                    </li>
                    <div class="sec-bottom">查看剩余标题</div>
                </ul>
            </li>
            <li><span class="first-title">一级标题</span>一级标题说明<span class="icon">></span></span>
                <ul class="sec-list">
                    <li>
                        <div class="left">
                            <p class="sec-item-title">二级标题</p>
                            <p>二级标题</p>
                            <p>标签 标签</p>
                        </div>
                        <div class="right">
                            <button>弹窗</button>
                        </div>
                    </li>
                    <li>
                        <div class="left">
                            <p class="sec-item-title">二级标题</p>
                            <p>二级标题</p>
                            <p>标签 标签</p>
                        </div>
                        <div class="right">
                            <button>弹窗</button>
                        </div>
                    </li>
                    <div class="sec-bottom">查看剩余标题</div>
                </ul>
            </li>
            <div class="bottom">查看剩余标题 ↓</div>
        </ul>
    </div>
    <div class="mask">
        <div class="mask-content">

        </div>
    </div>

CSS代码:

* {
    margin: 0;
    padding: 0;
    list-style: none;
    box-sizing: border-box;
}

.content header {
    font-size: 20px;
    border-bottom: 1px solid #ccc;
    padding: 10px;
}

.title-list>li {
    font-size: 12px;
    color: #bbb;
    padding: 10px;
    border-bottom: 1px solid #ccc;
}

.title-list>li .first-title {
    font-size: 16px;
    color: black;
    margin-right: 10px;
}

.icon {
    float: right;
}

.bottom {
    height: 40px;
    line-height: 40px;
    text-align: center;
    border-bottom: 1px solid #ccc;
}

.sec-bottom {
    height: 40px;
    line-height: 40px;
    text-align: center;
    background-color: white;
    color: black;
}

.sec-list {
    background-color: #f5f5f5;
}

.sec-list li {
    display: flex;
    align-items: center;
    padding: 10px 0;
}

.sec-list li .left {
    flex: 1;
}

.sec-list li .right {
    width: 20%;
}

.sec-list li .right button {
    width: 100%;
    height: 30px;
    background-color: #ff9800;
    color: white;
    outline: none;
    border: 0;
    border-radius: 5px;
}

.sec-item-title {
    color: black;
    font-size: 14px;
}

.mask {
    display: none;
    position: fixed;
    width: 100vw;
    height: 100vh;
    top: 0;
    background-color: rgba(0, 0, 0, .5);
}

.mask .mask-content {
    margin: auto;
    width: 100px;
    height: 100px;
    background-color: white;
    text-align: center;
    line-height: 100px;
    font-size: 28px;
}

JS代码:

    let oBottom = document.getElementsByClassName("bottom")[0];
    let titleList = document.getElementsByClassName("title-list")[0];
    let secLists = document.getElementsByClassName("sec-list");
    let mask = document.getElementsByClassName("mask")[0];
    let list = new List(titleList, oBottom, secLists, mask);

class List {
    constructor(oUl, moreBtn, secLists, mask) {
        this.oUl = oUl;
        this.moreBtn = moreBtn;
        this.secLists = secLists;
        this.mask = mask;
        this.render()
        this.eventBind()
    }
    // 初始渲染
    render() {
        let num = this.oUl.children.length
        if (num > 3) {
            for (let i = 2; i < num - 1; i++) {
                this.oUl.children[i].style.display = "none"
            }
        } else {
            this.moreBtn.style.display = "none"
        }
        for (let i = 0; i < this.secLists.length; i++) {
            this.secLists[i].style.display = "none"
        }

    }

    showMask(ele, i, j) {
        this.mask.style.display = "flex"
        ele.innerHTML = `${i}-${j}`
    }

    // 绑定事件
    eventBind() {
        let that = this
        this.moreBtn.onclick = () => {
            for (let i = 0; i < that.oUl.children.length; i++) {
                that.oUl.children[i].style.display = "block"
            }
            that.moreBtn.style.display = "none"
        }
        for (let i = 0; i < that.oUl.children.length - 1; i++) {
            that.oUl.children[i].onclick = (e) => {
                if (e.target.className == "icon") {
                    for (let j = 0; j < that.oUl.children.length - 1; j++) {
                        that.oUl.children[j].lastElementChild.style.display = "none"
                    }
                    e.target.nextElementSibling.style.display = "block"
                } else if (e.target.className == "sec-bottom") {
                    console.log("更多");
                    e.target.style.display = "none"
                }
            }
        }

        for (let i = 0; i < that.oUl.children.length - 1; i++) {
            for (let j = 0; j < that.oUl.children[i].lastElementChild.children.length - 1; j++) {
                that.oUl.children[i].lastElementChild.children[j].lastElementChild.onclick = () => {
                    that.showMask(that.mask.children[0], i, j)
                }
            }
        }
        that.mask.onclick = (e) => {
            if (e.target.className == "mask") {
                e.target.style.display = "none"
            }
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值