当我们写这个案例之前,需要引入好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实现这个案例。