jquery可拖动/可放置更改快照

Posted

技术标签:

【中文标题】jquery可拖动/可放置更改快照【英文标题】:jquery draggable / droppable change snap 【发布时间】:2015-09-19 17:44:07 【问题描述】:

我正在尝试创建一系列可拖放的 div。 一旦 div1 被删除,我将创建一个新的 div 并让它捕捉到一个新的位置。 然而,当 div1 被放下并且 div2 被拖动时,捕捉位置保持不变: (http://jsfiddle.net/kLpgukkj/2/)

var trackID = "path0";
var trackType = "a";

$('.map-track-box').droppable(
    tolerance: 'touch',
    drop: function(event,ui)
        // RETURNS HOME
        $('#trackDragger').animate( top: '30px', left: '20px' ,500);
    
);

$('#'+trackID).droppable(
    tolerance: 'touch',
    drop: function(event,ui)
        // IN POSITION
        var pos = $('#'+trackID).position();
        $('#trackDragger').animate( top: pos.top, left: pos.left ,500,function()  
            $('#draggerBox').append("<div class='"+trackType+"' style='z-index:10;position:absolute;top:"+pos.top+"px;left:"+pos.left+"px;'></div>");
            $('#trackDragger').css( top: '30px', left: '20px' ,500);
            $('#trackDragger').attr('class', 'd');
            $('#'+trackID).removeClass('ui-droppable'); // I attempted to remove the added class, and add it to the new element, but without luck
            if(trackID=="path0") 
                trackID = "path1";
            else if(trackID=="path1") 
                trackID = "path2";
                trackType = "d";
            else if(trackID=="path2") 
                trackID = "path3";
                trackType = "e";
            
            $('#'+trackID).addClass('ui-droppable');
        );
    
);


$('#trackDragger').draggable(
    revert: 'invalid',
    start: function(event,ui) 
        $('#trackDragger').attr('class', trackType);
    ,
    snap: "#"+trackID, // This keeps snapping to initial div (path0) even though trackID is being changed to path1,path2 etc
    snapMode: "inner",
    stop: function()
        var dragPos = $('#trackDragger').position();
        if(dragPos.left < 101 && dragPos.top < 91) 
            $('#trackDragger').attr('class', 'd');
        
        //$(this).draggable('option','revert','invalid');
    
);

上面的效果很好,但是被拖动的元素一直捕捉到 path0(初始可拖动 div)。 无论如何要强制一个新的快照位置?

谢谢

【问题讨论】:

你能不能解决你的问题,以便我们更好地了解你的问题! 小提琴:jsfiddle.net/kLpgukkj/2 【参考方案1】:

至于您提到的小提琴,您只将droppable 事件绑定到一个元素。那是

$('#'+trackID) // Your variable don't change from "path0" to any other.

据我了解,您希望其他黑盒也具有可放置事件绑定。

只需将 droppable 部分中的代码更改为以下代码即可。

$('.path').droppable();

这会将事件绑定到页面中的每个.path 元素。

查看更新的小提琴here。

【讨论】:

你好 Dimal。问题是,捕捉仍然只发生在 box1。它应该捕捉到 box1,然后是 box2,然后是 box3 如果您查看第 24-32 行,我会在此处更改 trackID 变量。我怀疑可能需要对可拖动对象进行某种重新初始化? 而不是重新初始化插件,如果您可以将第 44 行更改为snap: '.path',,那么它将捕捉到每个元素,但会接受应该接受该项目的下一个项目!我已经更新了小提琴。 jsfiddle.net/kLpgukkj/4【参考方案2】:

我发现添加:

$('#trackDragger').draggable("option", "snap", "#"+trackID);

将强制它捕捉到新元素。 此外使用

$('#'+trackID).droppable()...

会失败,因为它显然需要重新初始化才能将不同的元素用作可放置的元素。

【讨论】:

以上是关于jquery可拖动/可放置更改快照的主要内容,如果未能解决你的问题,请参考以下文章

容器内的jquery ui可拖动滚动

jQuery 可拖动,放置在父 div 之外时的事件

如何使用 jQuery 将可拖动项目居中放置在可放置的图像地图区域上?

包含到父级的JQuery Draggable和额外的一个

jquery draggable - 删除拖动元素

jQuery UI,可拖动,可放置,自动滚动