JQ完成模拟QQ好友分组案例(介绍JQ实现原理)

当我们写这个案例之前,需要引入好JQ文件,以防没有效果
这个案例的需求请看以下效果图
不能重复点击,只有删除掉之后才可以继续点击
效果图:
在这里插入图片描述

代码介绍:

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

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

        .boss {
            position: relative;
            width: 500px;
            height: 600px;
            border: 1px solid black;
            margin: 100px auto;
        }

        li {
            list-style: none;
        }

        .left {
            position: absolute;
            width: 50%;
            height: 100%;
            border: 1px solid red;
            top: 0;
            left: 0;
        }

        .right {
            position: absolute;
            width: 50%;
            height: 100%;
            border: 1px solid pink;
            right: 0;
            top: 0;
        }

        .left_text1,
        .left_text2 {
            width: 50px;
            cursor: pointer;
        }

        .left_box1>div {
            cursor: pointer;
        }

        .box1 {
            cursor: pointer;
        }

        .boss1 {
            height: 20px;
            overflow: hidden;
        }

        .left_text1 {
            float: left;
        }

        .left_text2 {
            float: left;
        }

        .jia {
            height: 20px;
            float: left;
            cursor: pointer;
        }
    </style>
</head>

<body>
    <!-- 大容器 -->
    <div class="boss">
        <!-- 左边分组 -->
        <div class="left">
            <!-- 分组1 -->
            <div class="boss1">
                <div onclick="group(this)" class="left_text1">分组1 </div>
                <div class="jia" onclick="jia(this)">+</div>
            </div>
            <!-- 到时候直接隐藏这个盒子分组1 -->
            <div class="left_box1">
                <div data="1" onclick="fun(this)">1</div>
                <div data="2" onclick="fun(this)">2</div>
                <div data="3" onclick="fun(this)">3</div>
                <div data="4" onclick="fun(this)">4</div>
            </div>
            <!-- 分组2 -->
            <div class="boss1">
                <div onclick="group(this)" class="left_text2">分组2 </div>
                <div class="jia" onclick="jia(this)">+</div>
            </div>
            <!-- 到时候直接隐藏这个盒子分组2 -->
            <div class="left_box1">
                <div data="5" onclick="fun(this)">11</div>
                <div data="6" onclick="fun(this)">22</div>
                <div data="7" onclick="fun(this)">33</div>
                <div data="8" onclick="fun(this)">44</div>
                <div data="9" onclick="fun(this)">1</div>
                <div data="10" onclick="fun(this)">2</div>
                <div data="11" onclick="fun(this)">3</div>
                <div data="12" onclick="fun(this)">4</div>
            </div>
        </div>
        <!-- 右边 -->
        <div class="right"></div>
    </div>
</body>
<script src="jquery-1.8.3.min.js"></script>
<script>
    // 注意 我先写了行内事件 全是传入this this指向本身
    // 这是点击分组1与分组2来回显示隐藏
    function group(e) {
        // 看布局 点击分组1或分组2后找到需要隐藏的div添加toggle()
        // toggle()的作用是看你元素是否显示或隐藏 如果是显示它就隐藏 如果是隐藏它就显示
        $(e).parent().next().toggle()
    }
    // 点击数字模块
    function fun(e) {
        // e 传入的是this 就是本身
        // 先不看这一个判断 主要的是下面Clone部分 读懂Clone部分再来看这一段
        // 判断点击的是哪一边的div 因为我是直接克隆
        if ($(e).parent().attr("class") == "right") {
            // 判断点击本身父级的类名是否是right 如果是我们就删除
            e.remove()
        } else { // 如果类名不是right 就是说明是左边框中的div
            // 如果this的父级类名不是right 调用Clone()
            Clone(e)
        }
    }
    //  封装克隆与不能重复点击
    function Clone(e) {
        // 克隆 循环右边创建子级创建div的个数
        for (let i = 0; i < $(".right>div").length; i++) {
            // 判断自身的自定义属性是否与右边框子级div的自定义属性是否相等
            console.log($(".jia").parent().next().children().attr("data"), $(".right>div").eq(i).attr("data"));
            if ($(e).attr("data") == $(".right>div").eq(i).attr("data")) {
                // 相等直接返回 这是不能重复点击
                return
            }
        }
        // 我们直接就是克隆 点了哪个就克隆哪个 
        let divs = $(e).clone(true)
        // 添加类名 主要还是添加一个小手样式
        divs.addClass("box1")
        // 我们把克隆好的div添加到右边框中
        $(".right").append(divs)
    }
    // 点击+
    function jia(e) {
        // 我们直接调用Clone()
        // 我们把左边中数字添加到右边 children()获取所有子元素
        // 看到这注意看我的布局就可以找到
        // 必须循环 
        for (let i = 0; i < $(e).parent().next().children().length; i++) {
            // children()获取的是一个集合
            Clone($(e).parent().next().children().eq(i))
        }
    }
</script>
</html>

感谢大家的阅读,如有不对的地方,或是有bug的地方,可以向我提出,感谢大家,过一段时间会写一篇用原生JS实现这个案例。

posted @ 2023-11-07 11:53  一叶知秋04  阅读(21)  评论(0编辑  收藏  举报  来源