javascript - Javascript 中的拖放

标签 javascript html

我正在制作一个sticky note system ,我希望便签可以用 javascript 拖动。我在这个site上找到了一个拖放脚本这对我来说非常有用。但我在便签 div 内有一个“拖动栏”,这应该是您可以拖动特定便签的唯一位置。我的脚本仅拖动光标单击的内容,我希望它拖动“.dragbar”div 的父元素“.parent”。

现在,脚本设置为当您单击 .parent 时拖动 .parent。在这段代码中,我如何选择“.dragbar”的父div,即“.parent”?

如果我让脚本选择 .dragbar,它只会在 .parent 内移动拖动条。注意:该脚本是原始代码,只是第 87 行和第 95 行中的选择器名称从“drag”更改为“parent”。

<!DOCTYPE html>
<html>

    <head>
        <style type="text/css">
            .pagecontent {
                width:98%;
                height:96%;
                overflow:hidden;
                background:lightyellow;
                border:1px solid black;
                padding:10px;
            }
            .parent {
                position:relative;
                height:300px;
                width:300px;
                background-color:gray;
                border:1px solid black;
                float:left;
                margin:0 10px 0 0;
                overflow:auto;
            }
            .dragbar {
                height:50px;
                width:300px;
                background:lightgray;
                cursor:move;
                position:relative;
            }
        </style>
    </head>

    <body>
        <div class="pagecontent">
            <h1>Dragging Practice</h1>
            <h3>Drag and drop the parent div by using the child dragbar</h3>
            <pre id="debug">mouse up</pre>
            <div class="parent">
                <div class="dragbar">I am the Child, my class is .dragbar</div>I am the Parent, my class is
                .parent</div>
            <div class="parent">
                <div class="dragbar">I am the Child, my class is .dragbar</div>I am the Parent, my class is
                .parent</div>
            <script language="JavaScript" type="text/javascript">
                <!--
                // this is simply a shortcut for the eyes and fingers
                function $(id) {
                    return document.getElementById(id);
                }
                var _startX = 0; // mouse starting positions
                var _startY = 0;
                var _offsetX = 0; // current element offset
                var _offsetY = 0;
                var _dragElement; // needs to be passed from OnMouseDown to OnMouseMove
                var _oldZIndex = 0; // we temporarily increase the z-index during drag
                var _debug = $('debug'); // makes life easier
                InitDragDrop();

                function InitDragDrop() {
                    document.onmousedown = OnMouseDown;
                    document.onmouseup = OnMouseUp;
                }

                function OnMouseDown(e) {
                    // IE is retarded and doesn't pass the event object
                    if (e == null) e = window.event;
                    // IE uses srcElement, others use target
                    var target = e.target != null ? e.target : e.srcElement;
                    _debug.innerHTML = target.className == 'parent' //Selector
                    ?
                    'draggable element clicked' : 'NON-draggable element clicked';
                    // for IE, left click == 1
                    // for Firefox, left click == 0
                    if ((e.button == 1 && window.event != null || e.button == 0) && target.className == 'parent') //Selector
                    {
                        // grab the mouse position
                        _startX = e.clientX;
                        _startY = e.clientY;
                        // grab the clicked element's position
                        _offsetX = ExtractNumber(target.style.left);
                        _offsetY = ExtractNumber(target.style.top);
                        // bring the clicked element to the front while it is being dragged
                        _oldZIndex = target.style.zIndex;
                        target.style.zIndex = 10000;
                        // we need to access the element in OnMouseMove
                        _dragElement = target;
                        // tell our code to start moving the element with the mouse
                        document.onmousemove = OnMouseMove;
                        // cancel out any text selections
                        document.body.focus();
                        // prevent text selection in IE
                        document.onselectstart = function () {
                            return false;
                        };
                        // prevent IE from trying to drag an image
                        target.ondragstart = function () {
                            return false;
                        };
                        // prevent text selection (except IE)
                        return false;
                    }
                }

                function ExtractNumber(value) {
                    var n = parseInt(value);
                    return n == null || isNaN(n) ? 0 : n;
                }

                function OnMouseMove(e) {
                    if (e == null) var e = window.event;
                    // this is the actual "drag code"
                    _dragElement.style.left = (_offsetX + e.clientX - _startX) + 'px';
                    _dragElement.style.top = (_offsetY + e.clientY - _startY) + 'px';
                    _debug.innerHTML = '(' + _dragElement.style.left + ', ' + _dragElement.style.top + ')';
                }

                function OnMouseUp(e) {
                    if (_dragElement != null) {
                        _dragElement.style.zIndex = _oldZIndex;
                        // we're done with these events until the next OnMouseDown
                        document.onmousemove = null;
                        document.onselectstart = null;
                        _dragElement.ondragstart = null;
                        // this is how we know we're not dragging
                        _dragElement = null;
                        _debug.innerHTML = 'mouse up';
                    }
                }
                //-->
            </script>
        </div>
    </body>

</html>

最佳答案

我建议您查看jQuery UI's draggabledroppable 。这些无疑比您链接的脚本更强大,您可以使用 jQuery 强大的选择器将元素设置为可拖动,并且仅在某些元素内可放置。

关于javascript - Javascript 中的拖放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10603379/

相关文章:

jquery - position absolute 跳转到jquery动画时的位置

html - 卡片无法添加页 footer 分

javascript - 用 ckeditor 整理 html

javascript - JS 循环 - 如何循环 X 个项目然后等待响应完成循环

javascript - slippry.js 插件无法正常工作

html - 在页面调整大小时 Bootstrap 最后一个子 css 更改

javascript - 将 Node 异步代码转换为 Promise

Javascript php验证,在2个文本框中填写一个文本框后第二次提交表单提交

javascript - NodeJS - 可从客户端和 Node 访问不同的文件

javascript - 将 document.write 存储在 JavaScript 中不起作用的变量中