jQuery UI:从原始 div 拖动和克隆,但保留克隆

Posted

技术标签:

【中文标题】jQuery UI:从原始 div 拖动和克隆,但保留克隆【英文标题】:jQuery UI: Drag and clone from original div, but keep clones 【发布时间】:2011-01-28 08:46:15 【问题描述】:

我有一个 div,它应用了 jQuery UI Draggable。我想要做的是单击并拖动它,然后创建一个保留在 dom 中并且在放置时不会被删除的克隆。

想象一副纸牌,我的盒子元素就是纸牌,我想从纸牌上拉出纸牌/div,让它们放在我的页面周围,但它们将是原始 div 的克隆。我只是想确保您不能创建另一个克隆的 div 之一。

我使用了以下内容,但效果并不理想:

$(".box").draggable( 
        axis: 'y',
        containment: 'html',
        start: function(event, ui) 
            $(this).clone().appendTo('body');
        
);

我想出了我的解决方案:

$(".box-clone").live('mouseover', function() 
    $(this).draggable( 
        axis: 'y',
        containment: 'html'
    );
);
$(".box").draggable( 
    axis: 'y',
    containment: 'html',
    helper: 'clone'
    stop: function(event, ui) 
        $(ui.helper).clone(true).removeClass('box ui-draggable ui-draggable-dragging').addClass('box-clone').appendTo('body');
    
);

【问题讨论】:

您可以发布您的解决方案作为答案,然后接受它。 :) 应该发布您的解决方案作为答案,然后接受它:) 【参考方案1】:

这就是我最终所做的工作:

$(".box-clone").live('mouseover', function() 
    $(this).draggable( 
        axis: 'y',
        containment: 'html'
    );
);
$(".box").draggable( 
    axis: 'y',
    containment: 'html',
    helper: 'clone',
    stop: function(event, ui) 
        $(ui.helper).clone(true).removeClass('box ui-draggable ui-draggable-dragging').addClass('box-clone').appendTo('body');
    
);

【讨论】:

你为什么用live而不是.draggable()?事实上,.draggable() 不起作用。 @GodgogArsenal 嗯,我不记得了。那是9年前。 :)【参考方案2】:

如果您想将元素(例如

)从 #source 移动到 #destination ,并且希望克隆它们(而不是移动),并且仍然可以在右侧排序,我找到了这个解决方案:
$(function() 

    $("#source li").draggable(
        connectToSortable: '#destination',
        helper: 'clone'
    )

    $("#destination").sortable();

  );

我知道这看起来非常简单,但它对我有用! :)

【讨论】:

这对我很有用,但我如何访问克隆的对象?【参考方案3】:

这是他的解决方案:

$(".box-clone").live('mouseover', function() 
    $(this).draggable( 
        axis: 'y',
        containment: 'html'
    );
);
$(".box").draggable( 
    axis: 'y',
    containment: 'html',
    helper: 'clone'
    stop: function(event, ui) 
        $(ui.helper).clone(true).removeClass('box ui-draggable ui-draggable-dragging').addClass('box-clone').appendTo('body');
    
);

【讨论】:

【参考方案4】:

这是我的工作方式: PS: 'marker' 是要拖动的对象, 'map' 是目标容器。

$(document).ready(function() 
    //source flag whether the drag is on the marker tool template
    var template = 0;
    //variable index
    var j = 0;
    $(".marker").draggable(
        helper: 'clone',
        snap: '.map',
        start: function(event, ui) 
            //set the marker tool template
            template = 1;
        
    );
    $(".map").droppable(
        accept: ".marker",
        drop: function(event, ui) 
            $(this).find('.map').remove();
            var item = $(ui.helper);
            var objectid = item.attr('id');
            //if the drag is on the marker tool template
            if (template == 1) 
                var cloned = $(item.clone());
                cloned.attr('id', 'marker' + j++);
                objectid = cloned.attr('id');
                cloned.draggable(
                    containment: '.map',
                    cursor: 'move',
                    snap: '.map',
                    start: function(event, ui) 
                        //Reset the drag source flag 
                        template = 0;
                    
                );
                cloned.bind("contextmenu", function(e) 
                    cloned.remove();
                    return false;
                );
                $(this).append(cloned);
            
            i++;
            var offsetXPos = parseInt(ui.offset.left - $(this).offset().left);
            var offsetYPos = parseInt(ui.offset.top - $(this).offset().top);
            alert("Dragged " + objectid + " to (" + offsetXPos + "," + offsetYPos + ")");
        
    );
);

【讨论】:

以上是关于jQuery UI:从原始 div 拖动和克隆,但保留克隆的主要内容,如果未能解决你的问题,请参考以下文章

jquery UI 可拖动助手:克隆从原始中删除可拖动?

jQuery UI 可排序:移动克隆但保持原始

jQuery UI Draggable:克隆项目并禁用相同(原始项目)的第二次拖动

如何使用 jquery ui 使拖动和克隆的元素再次可拖动?

Jquery UI 可拖动:如果按下 Ctrl 则克隆

jQuery-UI 可拖动克隆 - 启动处理程序是不是收到对被克隆元素的任何引用?