• JS实现图片拖拽、自定义菜单


    JS实现图片拖拽、自定义菜单

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>自定义右键菜单-地图缩放移动结合</title>
        <style>
            * {
                margin: 0;
                padding: 0;
            }
    
            body {
                background-color: #fff4c8;
            }
    
            #box {
                position: relative;
                 800px;
                height: 400px;
                border: solid #46696b;
                border-radius: 50px;
                margin: 80px auto 0 auto;
                background-color: #46696b;
                overflow: hidden;
            }
    
            .right_click_map_out, .right_click_map, .right_click_robot, .right_click_point {
                display: none;
                 100px;
                border- 1px 1px 0 1px;
                border-style: solid;
                border-color: black;
                background-color: rgba(242, 242, 242, 1);
                border-radius: 4px;
                position: fixed;
                left: 0;
                top: 0;
            }
    
            .right_click_map_out ul {
                list-style: none;
                cursor: pointer;
    
            }
    
            .right_click_map_out ul li {
                text-align: center;
                height: 31px;
                line-height: 31px;
                border-bottom: 1px solid #666;
            }
    
            .right_click_map ul {
                list-style: none;
                cursor: pointer;
            }
    
            .right_click_map ul li {
                text-align: center;
                height: 31px;
                line-height: 31px;
                border-bottom: 1px solid #666;
            }
    
            .right_click_robot ul {
                list-style: none;
                cursor: pointer;
            }
    
            .right_click_robot ul li {
                text-align: center;
                height: 31px;
                line-height: 31px;
                border-bottom: 1px solid #666;
            }
    
            .right_click_point ul {
                list-style: none;
                cursor: pointer;
            }
    
            .right_click_point ul li {
                text-align: center;
                height: 31px;
                line-height: 31px;
                border-bottom: 1px solid #666;
            }
    
            #test_map {
                text-align: center;
                position: absolute;
                border: solid #ffe238;
                border-radius: 20px;
                top: 25%;
                left: 25%;
                 50%;
                height: 50%;
                background-color: #ffe238;
            }
    
            #test_robot {
                position: absolute;
                top: 50%;
                left: 45%;
            }
    
            .point {
                display: inline-block;
                border: solid blue 5px;
                border-radius: 5px;
                margin-left: 40px;
                margin-top: 30px;
                cursor: pointer;
            }
    
            .db_click_point {
                display: none;
                background-color: #6bf5ce;
                 400px;
                height: 200px;
                border-radius: 10px;
                position: absolute;
                left: 35%;
                top: 20%;
            }
    
            .db_click_point ul {
                list-style: none;
            }
    
            .db_click_point ul li {
                text-align: center;
                height: 31px;
                line-height: 31px;
                border-bottom: 1px solid #666;
            }
    
        </style>
    </head>
    <body onselectstart="return false">
    <div id="box">
        <p style="text-align: center">模拟地图外界</p>
        <div id="test_map">
            <p>模拟地图</p>
            <div class="point" style="margin-left: 0" num="1"></div>
            <div class="point" num="2"></div>
            <div class="point" num="3"></div>
            <div class="point" num="4"></div>
            <div class="point" num="5"></div>
            <div class="point" num="6"></div>
            <div class="point" num="7"></div>
            <img src="./robot.png" alt="机器人" id="test_robot">
        </div>
        <div class="right_click_map_out" id="right_click_map_out">
            <ul>
                <li>寻找机器人</li>
                <li>隐藏机器人</li>
            </ul>
        </div>
        <div class="right_click_map" id="right_click_map">
            <ul>
                <li>设置定位</li>
                <li>寻找机器人</li>
                <li>隐藏机器人</li>
            </ul>
        </div>
        <div class="right_click_robot" id="right_click_robot">
            <ul>
                <li>取消任务</li>
                <li>一键返航</li>
                <li>返回充电</li>
                <li>隐藏机器人</li>
                <li>显示机器人</li>
                <li>查看任务</li>
            </ul>
        </div>
    
        <div class="right_click_point" id="right_click_point">
            <ul>
                <li>发布任务</li>
                <li>设备窗口</li>
            </ul>
        </div>
    </div>
    <div class="db_click_point" id="db_click_point">
        <ul>
            <li><span id="close_detail" style="float:right;cursor: pointer;margin-right: 10px;">X</span></li>
            <li>设备详情页</li>
            <li>设备名称:<span id="title">...</span></li>
        </ul>
    </div>
    
    <script type="text/javascript">
    
        var preventDefault = function (ev) {
            // 取消默认的右键菜单
            ev.returnValue = false;
            ev.preventDefault();
            if (document.all) {
                ev.cancelBubble = true;     // ie阻止事件流
            } else {
                ev.stopPropagation();      // w3c阻止事件流
            }
        };
    
        window.oncontextmenu = preventDefault;
    
        // 获取地图外界的盒子
        var box = document.getElementById("box");
    
        box.oncontextmenu = function (ev) {
            // var ev = window.event || e;
    
            // 获取鼠标当前的位置
            var client_x = ev.clientX;
            var client_y = ev.clientY;
            // 获取需要显示的右键菜单,并且设置左上角的坐标为当前鼠标位置
            var right_click_map_out = document.getElementById("right_click_map_out");
            right_click_map_out.style.display = "block";
            right_click_map_out.style.left = client_x + "px";
            right_click_map_out.style.top = client_y + "px";
        };
    
        var test_map = document.getElementById("test_map");
        test_map.oncontextmenu = function (ev) {
            // 获取鼠标当前的位置
            var client_x = ev.clientX;
            var client_y = ev.clientY;
            // 获取需要显示的右键菜单,并且设置左上角的坐标为当前鼠标位置
            var right_click_map = document.getElementById("right_click_map");
            right_click_map.style.display = "block";
            right_click_map.style.left = client_x + "px";
            right_click_map.style.top = client_y + "px";
        };
    
        var test_robot = document.getElementById("test_robot");
        test_robot.oncontextmenu = function (ev) {
            // 获取鼠标当前的位置
            var client_x = ev.clientX;
            var client_y = ev.clientY;
            // 获取需要显示的右键菜单,并且设置左上角的坐标为当前鼠标位置
            var right_click_robot = document.getElementById("right_click_robot");
            right_click_robot.style.display = "block";
            right_click_robot.style.left = client_x + "px";
            right_click_robot.style.top = client_y + "px";
        };
    
        document.body.onmousedown = function () {
            // 在任何位置点击鼠标,将右键菜单隐藏
            document.getElementById("right_click_map_out").style.display = "none";
            document.getElementById("right_click_map").style.display = "none";
            document.getElementById("right_click_robot").style.display = "none";
            document.getElementById("right_click_point").style.display = "none";
        };
    
        document.getElementById("right_click_map_out").onmousedown = preventDefault;
        document.getElementById("right_click_map_out").oncontextmenu = preventDefault;
        document.getElementById("right_click_map").onmousedown = preventDefault;
        document.getElementById("right_click_map").oncontextmenu = preventDefault;
        document.getElementById("right_click_robot").onmousedown = preventDefault;
        document.getElementById("right_click_robot").oncontextmenu = preventDefault;
        document.getElementById("right_click_point").onmousedown = preventDefault;
        document.getElementById("right_click_point").oncontextmenu = preventDefault;
    
    
        var params = {
            zoomVal: 1,  // 缩放倍率
            left: 0,
            top: 0,
            currentX: 0,
            currentY: 0,
            flag: false
        };
    
        box.onwheel = function (event) {
            params.zoomVal += event.wheelDelta / 1200;
            if (params.zoomVal >= 0.2) {
                // transform:对元素进行旋转、缩放、移动或倾斜
                // scale:缩放
                test_map.style.transform = "scale(" + params.zoomVal + ")";
            } else {
                // 这里限制了最小的缩小倍数
                params.zoomVal = 0.2;
                test_map.style.transform = "scale(" + params.zoomVal + ")";
                return false;
            }
        };
    
        // 获取相关CSS属性
        var getCss = function (o, key) {
            return o.currentStyle ? o.currentStyle[key] : document.defaultView.getComputedStyle(o, false)[key];
        };
        // 拖拽的实现
        var startDrag = function (bar, target, callback) {
            // 获取现在的位置
            if (getCss(target, "left") !== "auto") {
                params.left = getCss(target, "left");
            }
            if (getCss(target, "top") !== "auto") {
                params.top = getCss(target, "top");
            }
            bar.onmousedown = function (event) {
                // 鼠标落下 左键 右键 滚轮键
                params.flag = true;  // 设置为可移动状态
                if (!event) {
                    event = window.event;
                    // 防止IE文字选中
                    bar.onselectstart = function () {
                        return false;
                    }
                }
                var e = event;
                // 获取点击时对应的鼠标坐标值
                params.currentX = e.clientX;
                params.currentY = e.clientY;
            };
            document.onmouseup = function () {
                // 鼠标放开
                params.flag = false;  // 设置为不可移动状态
                // 将现在的位置记录下来
                if (getCss(target, "left") !== "auto") {
                    params.left = getCss(target, "left");
                }
                if (getCss(target, "top") !== "auto") {
                    params.top = getCss(target, "top");
                }
            };
            document.onmousemove = function (event) {
                // 鼠标移动的状态  并且是可移动状态
                var e = event ? event : window.event;
                if (params.flag) {
                    // 计算出鼠标按下到移动过程中的鼠标相对位移
                    var nowX = e.clientX, nowY = e.clientY;
                    var disX = nowX - params.currentX, disY = nowY - params.currentY;
                    target.style.left = parseInt(params.left) + disX + "px";
                    target.style.top = parseInt(params.top) + disY + "px";
                    // 不要执行与事件关联的默认动作
                    if (event.preventDefault) {
                        event.preventDefault();
                    }
                }
            };
        };
    
        startDrag(box, test_map);
        var points = document.getElementsByClassName("point");
        var db_click_point = document.getElementById("db_click_point");
        for (let i = 0; i < points.length; i++) {
            points[i].oncontextmenu = function (ev) {
                // 获取鼠标当前的位置
                var client_x = ev.clientX;
                var client_y = ev.clientY;
                // 获取需要显示的右键菜单,并且设置左上角的坐标为当前鼠标位置
                var right_click_point = document.getElementById("right_click_point");
                right_click_point.style.display = "block";
                right_click_point.style.left = client_x + "px";
                right_click_point.style.top = client_y + "px";
            };
            points[i].ondblclick = function (ev) {
                db_click_point.style.display = "block";
                document.getElementById("title").innerText = "测试" + this.getAttribute("num") + "号";
            }
        }
    
        var close_detail = document.getElementById("close_detail");
        close_detail.onclick = function (ev) {
            db_click_point.style.display = "none";
        }
    
    
    </script>
    
    </body>
    </html>
    
  • 相关阅读:
    objcopy使用
    linux中的strip命令简介
    strace命令详解
    bash执行顺序:alias --> function --> builtin --> program
    Ubuntu下安装docker
    uvm中类继承和phase
    error和exception有什么区别?
    sleep() 和 wait() 有什么区别?
    CSS3实现环形进度条?
    请写出你最常见到的5个runtime exception?
  • 原文地址:https://www.cnblogs.com/zyyhxbs/p/12192586.html
Copyright © 2020-2023  润新知