Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

文档上点击鼠标左键并拖动绘制矩形,,矩形上点击拖动矩形 #13

Open
lzpong opened this issue Nov 8, 2017 · 0 comments

Comments

@lzpong
Copy link
Owner

lzpong commented Nov 8, 2017

文档上点击鼠标左键并拖动绘制矩形,,
矩形上点击鼠标左键拖动矩形

.box {
    background: blue;
    position: absolute;
    opacity: 0.2;
    cursor: move;
}
.retc{
    position: absolute;
    border:1px dashed blue;
    overflow:hidden;
    background:#EFEFEF;
    opacity: 0.2;
}
window.onload = function(e) {
    e = e || window.event;
    // startX, startY 为鼠标点击时初始坐标
    // diffX, diffY 为鼠标初始坐标与 box 左上角坐标之差,用于拖动
    var startX, startY, diffX, diffY;
    // 是否拖动,初始为 false
    var dragging = false;
    document.onselectstart=function (e){e.returnValue=false;}
    // 鼠标按下
    document.onmousedown = function(e) {
        startX = e.pageX;
        startY = e.pageY;

        // 如果鼠标在 box 上被按下
        if(e.target.className.match(/box/)) {
            // 允许拖动
            dragging = true;

            // 设置当前 box 的 id 为 moving_box
            if(document.getElementById("moving_box") !== null) {
                document.getElementById("moving_box").removeAttribute("id");
            }
            e.target.id = "moving_box";

            // 计算坐标差值
            diffX = startX - e.target.offsetLeft;
            diffY = startY - e.target.offsetTop;
        }
        else {
            // 在页面创建 box
            var active_box = document.createElement("div");
            active_box.id = "active_box";
            active_box.className = "retc";
            active_box.style.top = startY + 'px';
            active_box.style.left = startX + 'px';
            document.body.appendChild(active_box);
            active_box = null;
        }
    };

    // 鼠标移动
    document.onmousemove = function(e) {
        // 更新 box 尺寸
        if(document.getElementById("active_box") !== null) {
            var ab = document.getElementById("active_box");
            ab.style.width = e.pageX - startX + 'px';
            ab.style.height = e.pageY - startY + 'px';
        }

        // 移动,更新 box 坐标
        if(document.getElementById("moving_box") !== null && dragging) {
            var mb = document.getElementById("moving_box");
            mb.style.top = e.pageY - diffY + 'px';
            mb.style.left = e.pageX - diffX + 'px';
        }
    };

    // 鼠标抬起
    document.onmouseup = function(e) {
        // 禁止拖动
        dragging = false;
        if(document.getElementById("active_box") !== null) {
            var ab = document.getElementById("active_box");
            ab.removeAttribute("id");
            ab.className="box";
            // 如果长宽均小于 3px,移除 box
            if(ab.offsetWidth < 3 || ab.offsetHeight < 3) {
                document.body.removeChild(ab);
            }
        }
    };
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant