Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在EXTJS中将图像拖放到其容器外_Javascript_Extjs_Drag And Drop_Draggable - Fatal编程技术网

Javascript 如何在EXTJS中将图像拖放到其容器外

Javascript 如何在EXTJS中将图像拖放到其容器外,javascript,extjs,drag-and-drop,draggable,Javascript,Extjs,Drag And Drop,Draggable,我有一个容器,里面有另外两个容器,并排(如列)。左边的colunm是一个放置区,rigth容器内部有几个其他容器,如洋葱层。它们每个都有几个其他的组件 在最里面的容器的右栏中,我有几个图像需要拖到左栏 我已经使所有图像都可以拖动,但是当我尝试这样做时,我无法将它们拖动到其父容器之外 为什么我不能把它们拖到我想去的地方 消失的图像 查看ExtJs中的示例(第12章) 您可以从该回购协议获取代码: 如果你能买到这本书,那真是太棒了 HTML代码: <html> <head>

我有一个
容器
,里面有另外两个
容器
,并排(如列)。左边的colunm是一个放置区,rigth
容器
内部有几个其他容器,如洋葱层。它们每个都有几个其他的
组件

在最里面的
容器
的右栏中,我有几个图像需要拖到左栏

我已经使所有图像都可以拖动,但是当我尝试这样做时,我无法将它们拖动到其父容器之外

为什么我不能把它们拖到我想去的地方

消失的图像

查看ExtJs中的示例(第12章)

您可以从该回购协议获取代码:

如果你能买到这本书,那真是太棒了

HTML代码:

<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

    <link rel="stylesheet" type="text/css" href="../../ext4/resources/css/ext-all.css"/>
    <script type="text/javascript" src="../../ext4/ext-all-debug.js"></script>
    <script type="text/javascript" src="dnd_with_elements_using_proxy.js"></script>

    <style type="text/css">
        body {
            padding : 10px;
        }

        .lockerRoom {
            width            : 150px;
            border           : 1px solid;
            padding          : 10px;
            background-color : #ECECEC;
        }

        .lockerRoom div {
            border           : 1px solid #FF0000;
            background-color : #FFFFFF;
            padding          : 2px;
            margin           : 5px;
            cursor           : move;
        }

        .pool {
            background-color : #ccccff;
        }

        .hotTub {
            background-color : #FFcccc;
        }

        .lockerRoom div, .lockerRoomChildren {
            border           : 1px solid #FF0000;
            background-color : #FFFFFF;
            padding          : 2px;
            margin           : 5px;
            cursor           : move;
        }

        .ddProxy {
            background-color : #FFFF00;
        }

        .dropZoneOver {
            background-color : #99FF99;
        }

        .invalidOver {
            border : 1px solid #FF0000 !important;
        }
    </style>
</head>
<body>
<table>
    <tr>
        <td align='center'>
            Male Locker Room
        </td>
        <td align='center'>
            Female Locker Room
        </td>
    </tr>
    <tr>
        <td>
            <div id="maleLockerRoom" class="lockerRoom">
                <div>Jack</div>
                <div>Aaron</div>
                <div>Abe</div>
            </div>

        </td>
        <td>
            <div id="femaleLockerRoom" class="lockerRoom">
                <div>Sara</div>
                <div>Jill</div>
                <div>Betsy</div>
            </div>
        </td>
    </tr>
</table>
<table>
    <tr>
        <td align='center'>
            Pool
        </td>
        <td align='center'>
            Hot Tub
        </td>
    </tr>
    <tr>
        <td>
            <div id="pool" class="lockerRoom pool"/>
        </td>
        <td>
            <div id="hotTub" class="lockerRoom hotTub"/>
        </td>
    </tr>

</table>

</body>
</html>

当我拖动鼠标离开“红色”容器时,图像继续消失。没有代码很难帮助@JoãoGomes请阅读第12章iI。我相信你会发现问题所在,也会提高你对DD类的理解。我解决了这个问题:克隆图像节点并在放置区周围创建一个dragZone
Ext.onReady(function() {
        // A list of method overrides
    var overrides = {
        // Called when mousedown for a specific amount of time
        startDrag : function() {
            var dragProxy = Ext.get(this.getDragEl());
            var el = Ext.get(this.getEl());

            // Apply CSS styles to the drag element
            dragProxy.addCls('lockerRoomChildren');
            dragProxy.addCls('ddProxy');
            dragProxy.setOpacity(.70);
            dragProxy.update(el.dom.innerHTML);
            dragProxy.setSize(el.getSize())
            //Cache the original XY Coordinates of the element, we'll use this later.
            this.originalXY = el.getXY();
            //el.hide();
        },

        // Only called when element is dragged over the a dropzone with the same ddgroup
        onDragEnter : function(evtObj, targetElId) {
            var targetEl = Ext.get(targetElId);
            targetEl.addCls('dropzoneOver');
        },
        // Only called when element is dragged out of a dropzone with the same ddgroup
        onDragOut : function(evtObj, targetElId) {
            var targetEl =  Ext.get(targetElId);
            targetEl.toggleCls('dropzoneOver');
        },
        // Called when element is dropped not anything other than a
        // dropzone with the same ddgroup
        onInvalidDrop : function() {
            this.invalidDrop = true;
        },
    // Called upon successful drop of an element on a DDTarget with the same
        onDragDrop : function(evtObj, targetElId) {
            var dragEl = Ext.get(this.getEl());
            var dropEl = Ext.get(targetElId);

            if (dragEl.dom.parentNode.id != targetElId) {

                dropEl.appendChild(dragEl);
                this.onDragOut(evtObj, targetElId);
                dragEl.dom.style.position ='';
            }
            else {
                this.onInvalidDrop();
            }
        },
        b4EndDrag : Ext.emptyFn,
        endDrag : function() {
            var dragProxy = Ext.get(this.getDragEl());
            if (this.invalidDrop === true) {
                var dragEl = Ext.get(this.getEl());

                //el.dom.style.position = 'relative';

    //            dragEl.dom.style.position = '';

                var animCfgObj = {
                    easing   : 'easeOut',
                    duration : .25,
                    callback : function() {
                        //dragEl.dom.style.position = '';
                        dragProxy.hide();
                        dragEl.highlight();
                    }
                };
                dragProxy.moveTo(this.originalXY[0], this.originalXY[1], animCfgObj);
            }
            else {
                dragProxy.hide();
            }
            delete this.invalidDrop;
        }
    };

    // Setup the people to be draggable
    var maleElements = Ext.get('maleLockerRoom').select('div');
    Ext.each(maleElements.elements, function(el) {
        var dd = new Ext.dd.DDProxy(el, 'males', {
            isTarget  : false
        });
        Ext.apply(dd, overrides);
    });

    var femaleElements = Ext.get('femaleLockerRoom').select('div');
    Ext.each(femaleElements.elements, function(el) {
        var dd = new Ext.dd.DDProxy(el, 'females', {
            isTarget  : false
        });
        Ext.apply(dd, overrides);
    });


    var maleLockerRoomDropTarget = new Ext.dd.DropTarget('maleLockerRoom', {
        ddGroup : 'males'
    });

    var femaleLockerRoomDropTarget = new Ext.dd.DropTarget('femaleLockerRoom', {
        ddGroup : 'females'
    });


    // pool and hot tub drop targets
    var poolDropTarget = new Ext.dd.DropTarget('pool', {
        ddGroup : 'males'
    });

    poolDropTarget.addToGroup('females');

    var hotTubDropTarget = new Ext.dd.DropTarget('hotTub', {
         ddGroup : 'males'
     });

    hotTubDropTarget.addToGroup('females');


});