将 jQuery 可拖动对象放置在不可放置部分中时,将其还原回特定容器

Posted

技术标签:

【中文标题】将 jQuery 可拖动对象放置在不可放置部分中时,将其还原回特定容器【英文标题】:Revert a jQuery draggable object back to a specific container when is dropped in non-droppable section 【发布时间】:2014-02-06 00:26:01 【问题描述】:

这是我的代码示例:http://jsfiddle.net/german_martin/hr8Q7/1/

我有一个名为“Unassigned container”的容器,里面有其他可拖动的对象(“t​​itle A”、“title B”...等) 我还有另外 4 个容器,叫做“Container”

我的问题示例:当用户将“title A”(或其他)放入“Container”时,一切正常,但是当用户将“title ...”放在外面时,此元素必须返回“Unassigned container” "

问题:当用户将“标题...”放在“容器”之外时,有没有办法让“标题...”返回到“未分配的容器”?

图片示例:

   $(function () 

        $(".unassignedClassContainer").sortable(
            connectWith: ".container",
            handle: ".title",
            revert: true
        );

        $(".container").sortable(
            connectWith: ".container, .unassignedClassContainer",
            handle: ".title",
            revert: true
        );
  );     

【问题讨论】:

【参考方案1】:

我曾经做过这样的事情。我将以下代码用于可拖动对象。

$(".draggable").draggable( 
        containment: '#content',
        cursor: 'move',
        snap: '#dropSlots',
        snapMode: "inner",
        start: function()
            Positioning.initialize($(this));
        ,
        stop: function() 
            Positioning.reset($(this));
        
     );

使用这个:

var Positioning = (function () 
    return 
        //Initializes the starting coordinates of the object
        initialize: function (object) 
            if ( object.data("dragged") != "1" ) 
                object.data("dragged", "1");
                object.data("originalLocation", $(this).originalPosition = top:0,left:0);
            
        ,
        //Resets the object to its starting coordinates
        reset: function (object) 
            if ( object.data("dragged") == "1" && object.data("inDroppable") != "1" )
                var OriginalLocationTop = object.data("originalLocation").top;
                var OriginalLocationLeft = object.data("originalLocation").left;
                $(object).animate(top: OriginalLocationTop, left: OriginalLocationLeft, 1500);
            
        ,
    ;
)();

如您所见,它使用 object.data("inDroppable") 这是在将可拖动对象拖放到可放置对象时设置的。

可放置代码:

$('.droppable').droppable( 
     drop: handleQuestionDrop,
     out: handleQuestionMoveOut,
     tolerance: "pointer"
 );

这使用了以下两个函数:

function handleQuestionMoveOut( event, ui ) 
    $(ui.draggable).data("inDroppable", "0");
    // A lot of other project related stuff, deleted...


function handleQuestionDrop( event, ui ) 

    // position draggable directly on top of the slot
    ui.draggable.position(                 
        my: 'left top',
        at: 'left top',
        of: $(this),
        using: function(css, calc) 
            ui.draggable.animate(css, 250, "linear");
                   
     );

    $(ui.draggable).data("inDroppable", "1");

如您所见,代码很多,我已经删除了所有不相关的代码。 那么这段代码实现的内容如下:

    在第一次拖动时为您的可拖动对象指定一个“起始坐标”。 在停止拖动这些可拖动对象时,检查它们是否落在了放置点。 如果有,请将其放在插槽顶部。 如果没有,请将它们放置在原始坐标的顶部

请随时提出任何问题 ;)

【讨论】:

以上是关于将 jQuery 可拖动对象放置在不可放置部分中时,将其还原回特定容器的主要内容,如果未能解决你的问题,请参考以下文章

使用 jQuery 检测单个可拖动对象的多个可放置对象

为啥我的 Jquery 可拖动对象放置在三个可拖放对象之一上时会跳转?

jQuery UI:使用容差触摸放置对象时的可拖动行为

如何决定是接受还是拒绝 jQuery 可拖动到可放置对象

Jquery 可拖动/可放置和可排序组合

拖放到动态创建的 div 后,Jquery-ui 可拖动无法正常工作