JS 基础- 排他思想(个人笔记)

1、排他思想

如果有同一组元素,想要某一个元素实现某种样式, 需要用到循环的排他思想算法:

  1. 所有元素全部清除样式(干掉其他人)
  2. 给当前元素设置样式 (保留我自己)
  3. 注意顺序不能颠倒

思路:
a. 选择需要的一类标签,获得一个伪数组;
b. 用for()循环遍历获得的伪数组,排除其他(包括自己)的所有样式;
c. 遍历后用this改变自己的样式。

代码实现

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

<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<style>
    .change {
        background-color: skyblue;
    }
</style>
<script>
    window.onload = function () {
        var btns = document.getElementsByTagName('button');
        for (var i = 0; i < btns.length; i++) {
            btns[i].index = i; //记录索引号
            btns[i].onclick = function () {
                //把所有按钮的颜色去掉 --->干掉所有人(包括自己)
                for (var i = 0; i < btns.length; i++) {
                    btns[i].className = '';
                }
                //改变当前颜色  ---> 保留我自己
                this.className = 'change';
            }
        }
    }
</script>

<body>
    <button>按钮1</button>
    <button>按钮2</button>
    <button>按钮3</button>
    <button>按钮4</button>
    <button>按钮5</button>
    <button>按钮6</button>
</body>

</html>

2、应用

应用案例 新浪新闻页:如图
在这里插入图片描述

实现方法:
最外面一个大盒子,大盒子里上面一个放按钮,下面一个盒子放div,且上下个数对应。移动鼠标,按钮颜色变化且相应的盒子出现。

2.1 单Tab栏

代码实现

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

<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<style>
    * {
        margin: 0;
        padding: 0;
    }

    li {
        list-style-type: none;
    }

    .tab {
        width: 360px;
        margin: 100px auto;
    }

    .tab_list {
        height: 36px;
        border: 1px solid #DBDEE1;
        background-color: #F7F7F7;
    }

    .tab_list li {
        float: left;
        height: 35px;
        line-height: 36px;
        padding: 0 10px;
        text-align: center;
        cursor: pointer;
        font-size: 16px;
    }

    .tab_list .current {
        border-top: 3px solid #ff8400;
        background-color: #fff;
        margin-top: -1px;
        border-left: 1px solid #DBDEE1;
        margin-left: -1px;
        border-right: 1px solid #DBDEE1;
    }

    .tab_con {
        padding: 10px 0 0 0;
    }

    .item {
        display: none;
    }
</style>
<script>
    window.onload = function () {
        // 获取元素
        var lis = document.querySelector('.tab_list').querySelectorAll('li');
        var items = document.querySelectorAll('.item');
        // for循环绑定点击事件
        for (var i = 0; i < lis.length; i++) {
            lis[i].index = i; //记录索引号
            lis[i].onmouseover = function () {
                // 排他思想
                // 干掉所有人 
                for (var i = 0; i < lis.length; i++) {
                    lis[i].className = '';
                }
                // 保留我自己 
                this.className = 'current';
                // 下面div显示内容模块
                // 干掉所有人 让其余的item 这些div 隐藏
                for (var j = 0; j < items.length; j++) {
                    items[j].style.display = 'none';
                }
                // 保留我自己 让对应的item 显示出来
                items[this.index].style.display = 'block';
            }
        }
    }
</script>

<body>
    <div class="tab">
        <div class="tab_list">
            <ul>
                <li class="current">图片</li>
                <li>专栏</li>
                <li>热点</li>
            </ul>
        </div>
        <div class="tab_con">
            <div class="item" style="display: block;">
                图片部分
            </div>
            <div class="item">
                专栏部分
            </div>
            <div class="item">
                热点部分
            </div>
        </div>
    </div>
</body>

</html>

效果
在这里插入图片描述

2.2 多Tab栏

若直接使用单Tab的会出错,多个tab栏切换时需要用大盒子的id区分来封装个函数。

代码实现

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

<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<style>
    * {
        margin: 0;
        padding: 0;
    }

    li {
        list-style-type: none;
    }

    .tab {
        width: 360px;
        margin: 100px auto;
    }

    .tab_list {
        height: 36px;
        border: 1px solid #DBDEE1;
        background-color: #F7F7F7;
    }

    .tab_list li {
        float: left;
        height: 35px;
        line-height: 36px;
        padding: 0 10px;
        text-align: center;
        cursor: pointer;
        font-size: 16px;
    }

    .tab_list .current {
        border-top: 3px solid #ff8400;
        background-color: #fff;
        margin-top: -1px;
        border-left: 1px solid #DBDEE1;
        margin-left: -1px;
        border-right: 1px solid #DBDEE1;
    }

    .tab_con {
        padding: 10px 0 0 0;
    }

    .item {
        display: none;
    }
</style>
<script>
    window.onload = function () {
        function bigbox(bigid) {
            var bigid = document.getElementById(bigid); //大盒子的id            
            var lis = bigid.querySelector('.tab_list').querySelectorAll('li');
            var items = bigid.querySelectorAll('.item');

            for (var i = 0; i < lis.length; i++) {
                lis[i].index = i;
                lis[i].onmouseover = function () {
                    //排他思想
                    for (var i = 0; i < lis.length; i++) {
                        lis[i].className = '';
                    }
                    this.className = 'current';
                    for (var j = 0; j < items.length; j++) {
                        items[j].style.display = 'none';
                    }
                    items[this.index].style.display = 'block';

                    //或者合并代码(如下)
                    /*
                     * for (var j=0; j<lis.length;j++){
                     *   lis[j].className='';
                     *   items[j].style.display='none';
                     * }
                     * this.className='current';
                     * items[this.index].style.display='block';
                     */
                }
            }

        }
        bigbox('one');
        bigbox('two');
    }
</script>

<body>
    <div class="tab" id="one">
        <div class="tab_list">
            <ul>
                <li class="current">图片</li>
                <li>专栏</li>
                <li>热点</li>
            </ul>
        </div>
        <div class="tab_con">
            <div class="item" style="display: block;">
                图片部分
            </div>
            <div class="item">
                专栏部分
            </div>
            <div class="item">
                热点部分
            </div>
        </div>
    </div>

    <div class="tab" id="two">
        <div class="tab_list">
            <ul>
                <li class="current">视频</li>
                <li>综艺</li>
            </ul>
        </div>
        <div class="tab_con">
            <div class="item" style="display: block;">
                视频部分
            </div>
            <div class="item">
                综艺部分
            </div>
        </div>
    </div>
</body>

</html>

效果
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值