添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

需求:鼠标按下后,显示div用于放置所有的li;当鼠标框选住li,并抬起鼠标时,所有的li放进div中

  1. 先移动鼠标生成画框;
  2. 将生成的画框和已有的li进行碰撞,如果碰到了,就设置active,没有就清除active;
  3. 在鼠标放开时,找到所有为active的li,将其appendChild进div中
  • 不能直接碰撞时,直接appendChild到div中,会将后面的li全部添加进去div
  • 必须给没有碰到的清除active。否则当操作时,先往前拉,后往后拉,会给往前拉的所有li都加上active,这样再往后拉后会全部加到div里
<!DOCTYPE html>
<html lang="en">
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        #bucket {
            border: 1px solid black;
            height: 240px;
            display: block;
            width: 100px;
            height: 100px;
            background: yellow;
            border: 1px solid black;
            list-style: none;
            float: left;
            margin: 10px;
        .box {
            border: 1px solid peru;
            position: absolute;
            background: rgba(0,0,255,.4);
        .active {
            background: green;
    </style>
</head>
<ul id="bucket"></ul>
    <li>1</li>
    <li>2</li>
    <li>3</li>
    <li>4</li>
    <li>5</li>
    <li>6</li>
    <li>7</li>
    <li>8</li>
    <li>9</li>
    <li>10</li>
    <li>11</li>
    <li>12</li>
    <li>13</li>
<script>
    //需求:鼠标按下后,显示div用于放置所有的li;当鼠标框选住li,并抬起鼠标时,所有的li放进div中
    //获取/设置元素的样式
    function css(el,attr,val){
        if(arguments.length == 3){
            el.style[attr] = val+'px';
        }else{
            return parseInt(getComputedStyle(el)[attr]);
    //元素碰撞
    let isConcat = (el1,el2) =>{
        //判断是否碰撞
        let div1Dis = el1.getBoundingClientRect();
        let div2Dis = el2.getBoundingClientRect();
        if(div1Dis.right > div2Dis.left &&
            div1Dis.bottom > div2Dis.top &&
            div1Dis.left < div2Dis.right &&
            div1Dis.top < div2Dis.bottom){
                el2.classList.add("active");
                return el2;
        }else{
            //注意:必须给没有碰到的清除active。否则当操作时,先往前拉,后往后拉,会给往前拉的所有li都加上active,这样再往后拉后会全部加到div里
            el2.classList.remove("active");
    document.addEventListener("mousedown",function(e){
        let div = document.createElement("div");
        let startPos = {};
        startPos.x = e.clientX;
        startPos.y = e.clientY;
        let li = null;
        function move(e){
            let curPos = {};
            curPos.x = e.clientX;
            curPos.y = e.clientY;
            //移动时画框
            div.classList.add("box");
            //设置div的宽高及top/left
            css(div,"width",Math.abs(curPos.x-startPos.x));
            css(div,"height",Math.abs(curPos.y-startPos.y));
            css(div,"left",Math.min(curPos.x,startPos.x));
            css(div,"top",Math.min(curPos.y,startPos.y));
            document.body.appendChild(div);
            let lis = document.querySelectorAll("ul li");
            //将框住的li放进div中(div和多个元素碰撞)
            lis.forEach(item=>{
                // 将每个li和div进行碰撞测试,如果碰到了,就设置active
                //注意:不能直接碰撞时,直接appendChild到div中,会将后面的li全部添加进去
                isConcat(div,item);
        //获取鼠标移动时位置
        document.addEventListener("mousemove",move);
        document.addEventListener("mouseup",function(){
            document.removeEventListener("mousemove",move);
            let bucket = document.querySelector("#bucket"); 
            //获取到所有样式为active的li
            let lis = document.querySelectorAll("ul .active");
            lis.forEach(item=>{
                item.classList.remove("active");
                bucket.appendChild(item);
            //鼠标放下时清除上一个div
            div.remove();//使用removeChild有可能还未创建div
            once:true
        e.preventDefault();
</script>
</body>
</html>
需求:鼠标按下后,显示div用于放置所有的li;当鼠标框选住li,并抬起鼠标时,所有的li放进div中思路:先移动鼠标生成画框; 将生成的画框和已有的li进行碰撞,如果碰到了,就设置active,没有就清除active; 在鼠标放开时,找到所有为active的li,将其appendChild进div中问题:不能直接碰撞时,直接appendChild到div中,会将后面的li全部添...
一个轻量级的,经过全面测试的(单元和e2e测试),TypeScript'd,React库(1个组件和1个挂钩!),使您能够使用光标 拖动 并选择多个项目。 该库的底层逻辑是从启发而来的。 该项目是通过引导的。 没有选定的状态管理-与[React Drag to Select]( ,如果选择了某个项目,则不会管理此组件。这取决于您来处理。只有当项目变为 选中 触发钩。 支持深度嵌套的项-与[React Drag to Select]( ,您尝试选择的项不必是父HOC的直接子项。只要它们内部具有useSelectableByDragging ,并且 支持虚拟化-与[React Drag to Select]( ,我们的库也可以支持虚拟化列表! 拖动 选择 这是 ,用于创建 拖动 并将 拖动 层绘制到屏幕上。 它没有道具/配置。 < DragSelection>
本例是在vue中实现的 拖动 功能,但是基本思想是一样的。主要是根据mousedown、mousemove、mouseup三个事件,结合元素的offsetLeft和el.style.left属性实现。 顺便记录一下两者的区别: 1. offsetLeft总的来说是获取当前元素距父元素左侧的值 ,具体分两种情况: 如果当前元素仍在普通流中(即position值为static或者relative),...
这是用两个大的 div 进行测试,第一个 div 中有两个小的 div ,当点击某个小的 div 的时候,传递点击的 div 复制到另一个大的 div 中。并保留之前的 div 。 (如果不想保留之前的可以搜索 “appendChild()”的方法 ) 点击时候是不刷新的 <!DOCTYPE html> <html lang="en"> <meta charset="UTF-8"> <title> </title>
< div style="border-radius:10px" @mouseover="mouseOver" :style="active" @mouseleave="mouseLeave"> </ div > data(){ return{ active:"" methods(){ mouseOver(){ //改变样式 this.active = 'background-color: rg.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> ...
div 的left和top:如果 鼠标 当前位置> 鼠标 起始位置,则为 鼠标 起始位置( 鼠标 往右拉);如果 鼠标 当前位置< 鼠标 起始位置,则为 鼠标 当前位置( 鼠标 往左拉); 通过当前坐标x/y- 鼠标 起始坐标x/y得到要生成的 div 的宽度 ,如果往左拉, 鼠标 当前坐标-起始坐标可能为负数,所以,需要使用绝对值函数Math.abs(); 鼠标 按下移动时动态获...
&lt;head&gt; 鼠标 点选功能&lt;/head&gt; &lt;style&gt; body{padding-top:50px;padding-left:100px;padding-right:150px;} .file Div {float:left;width:100px;height:100px;text-align:center;line-h... &lt; div style="position: absolute; width: 600px; border: 1px solid red"&gt; &lt; div id="title" class="top" style="background-color: #1f2222; height: 40px;color: 使用js实现 鼠标 点击 div 实现拖拽 效果 ,物体跟随 鼠标 进行移动 功能 效果 要点: 鼠标 在物体内按下不松之后, 鼠标 移动,物体跟随 鼠标 位置发生移动,实现 鼠标 拖拽 效果 ,下方代码实现的是拖拽图片进行移动的 效果 ; **如果是图片,需要清除一下图片标签在浏览器中的默认事件** ```javascript var o = document.getElementById('box');//移动的物体 var vH=document.documentElement.clientHeight;/
"chuyuhuntou": ["chuyuhuntou.jpg","luodibao.jpg"]这个列表有两个图片,做一个 画框 的函数, 鼠标 左键 拖动 画框 鼠标 右键结束 画框
# 创建 画框 的回调函数 def draw_rectangle(event, x, y, flags, param): global drawing, top_left_pt, bottom_right_pt if event == cv2.EVENT_LBUTTONDOWN: # 鼠标 左键按下 drawing = True top_left_pt = (x, y) elif event == cv2.EVENT_LBUTTONUP: # 鼠标 左键释放 drawing = False bottom_right_pt = (x, y) cv2.rectangle(img, top_left_pt, bottom_right_pt, (0, 255, 0), 2) cv2.imshow('image', img) elif event == cv2.EVENT_RBUTTONDOWN: # 鼠标 右键按下 drawing = False # 图片列表 image_list = ["chuyuhuntou.jpg", "luodibao.jpg"] for image_path in image_list: # 读取图片 img = cv2.imread(image_path) cv2.namedWindow('image') cv2.setMouseCallback('image', draw_rectangle) drawing = False top_left_pt, bottom_right_pt = (-1, -1), (-1, -1) while True: cv2.imshow('image', img) # 按下ESC键退出当前图片,按下'q'键退出程序 key = cv2.waitKey(1) if key == 27: # ESC键 break elif key == ord('q'): exit() cv2.destroyAllWindows() 该代码会循环遍历图片列表中的每张图片,然后在每张图片上实现 画框 的功能。你可以使用 鼠标 左键 拖动 画框 ,使用 鼠标 右键结束绘制。绘制的框会以绿色边框显示在窗口中。按下ESC键可以退出当前图片的绘制,按下'q'键可以退出程序。 请确保将图片文件(chuyuhuntou.jpg和luodibao.jpg)与代码文件放在同一目录下或者提供正确的图片路径。 希望这个例子对你有帮助!如果还有其他问题,请随时提问。