用ES6写选项卡

html和css

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        * {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
        }

        .clearFix {
            *zoom: 1;
        }

        .clearFix::after {
            display: block;
            height: 0;
            content: '.';
            clear: both;
            visibility: hidden;
        }

        .cursor {
            cursor: pointer;
        }

        .block {
            display: block;
        }

        .main {
            width: 80%;
            margin: 100px auto;
            border: 1px solid salmon;
        }

        .boxTop {
            width: 100%;
        }

        .boxTop ul {
            float: left;
        }

        .boxTop li {
            list-style: none;
            position: relative;
            float: left;
            max-width: 150px;
            width: 100px;
            padding: 0 10px;
            text-align: center;
            line-height: 1;
            height: 50px;
            line-height: 50px;
        }

        .boxTop li {
            border-right: 1px solid #ccc;
            border-bottom: 1px solid #ccc;
        }

        .boxTop li span:nth-of-type(even) {
            position: absolute;
            right: 0;
            top: 0;
            width: 15px;
            height: 15px;
            color: #fff;
            background-color: #000;
            line-height: 10px;
            font-size: 15px;
            text-align: center;
            border-bottom-left-radius: 100%;
        }

        .boxTop li.liActive {
            border-bottom: 2px solid #fff;
            margin-bottom: -1px;
        }

        .boxTop .tabadd {
            float: right;
            width: 30px;
            height: 30px;
            border: 1px solid;
            text-align: center;
            line-height: 30px;
            font-size: 20px;
            margin: 10px;
        }

        .sec div {
            display: none;
            width: 100%;
            height: 300px;
        }

        .sec {
            border: 1px solid #ccc;
            margin-top: -1px;
        }

        .sec .secActive {
            display: block;
        }
    </style>
</head>

<body>
    <section class="main" id="Tab">
        <div class="boxTop clearFix">
            <ul class="clearFix">
                <li class="liActive"><span class="block">测试1</span><span class="block cursor">&times;</span></li>
                <li><span class="block">测试2</span><span class="block cursor">&times;</span></li>
            </ul>
            <div class="tabadd clearFix cursor">
                <span class="block">+</span>
            </div>
        </div>
        <div class="sec" id="sec">
            <div class="secActive">测试1</div>
            <div>测试2</div>
        </div>
    </section>
    <script src="js/tabToggle.js"></script> 
</body>

</html>

js

面向对象版tab栏切换 添加功能

  1. 点击+可以实现添加新的选项卡和内容
  2. 第一步:创建新的选项卡li 和新的内容标签
  3. 第二步:把创建的两个元素添加到对应的父元素中。
  4. 以前的做法:动态创建元素createElement,但是元素里面的内容较多,需要innerHTML赋值在appendChild
    追加到父元素里面
  5. 现在高级的做法:利用insertAjacentHTML()可以直接把字符串格式添加到父元素中
  6. appendChild不支持追加字符串的子元素,利用insertAjacentHTML支持追加字符串的元素

面向对象版tab栏切换 删除功能

  1. 点击❌可以删除当前的li选项当前的内容展示区域
  2. ❌是没有索引号的,但是他的父级li有,这个索引号正好是我们想要的
  3. 所以核心思路是:点击❌是可以删除这个索引号相对应的li和内容部分

面向对象版tab栏切换 编辑功能

  1. 双击选项卡li或者对应的展示的那内容,就可以实现修改功能
  2. 双击事件是:ondblclick
  3. 如果双击文字,此时需要双击禁止选中文字
  4. window.getSelection?window.getSelection().removeAllRanges():document.selection.empty()
  5. 核心思路:双击文字时,在里面生成一个文本框,当时去焦点或者按下回车然后把文字赋值给元素即可
var that;
class Tab {
    constructor(id) {
        that = this;
        this.main = document.querySelector(id);
        this.lis = this.main.querySelectorAll("li");
        this.ul = this.main.querySelector("ul")
        this.sec = document.getElementById("sec");
        this.div = this.sec.querySelectorAll("div");
        //this.add = this.main.querySelector(".tabadd");
        this.init();
    }
    init() {
        //init 初始化操作让相关的元素绑定事件
        this.add.onclick = this.addTab;
        for (var i = 0; i < this.lis.length; i++) {
            this.lis[i].index = i;
            this.lis[i].onclick = this.toggleTab;
        }
    }
    //切换功能
    toggleTab() {
        for (var i = 0; i < that.lis.length; i++) {
            that.lis[i].className = "";
            that.div[i].className = ""}
        this.className = "liActive"
        that.div[this.index].className = "secActive"
    }
}
new Tab("#Tab")
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小李学软件

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值