1

我之前的问题有一个很好的解决方案,可以在删除后成功克隆图像。

这是代码:

$(function() {
var makeDraggable = function(element) {
    element.draggable({ 
        revert: "invalid",
        appendTo: "#droppable",
        helper: "clone" 
    });
}
$( "#droppable" ).droppable({
    activeClass: "ui-state-default",
    hoverClass: "ui-state-hover",
    drop: function(event, ui) {
        var newClone = $(ui.helper).clone();
        makeDraggable(newClone);
        $(this).after(newClone);
    }
});
// Initalise the program by making first draggable:
makeDraggable($(".draggable img"));

但问题是我想在目标区域一次只显示一张图像。但目前显示所有丢弃的图像。

更具体地说,当用户将图像放置在目标区域中并随后拖动另一个图像时,应从放置或目标区域中删除先前的图像,并且仅新图像应在目标区域中可见。请参阅此演示:jsFiddle 示例

我该如何解决这个问题?

4

3 回答 3

1

在 drop 方法中,而不是像这样使用 .after 使用 .append()

drop: function(event, ui) {
  var newClone = $(ui.helper).clone();
  makeDraggable(newClone);
  $(this).children(':not(span)').remove(); // <--- this will remove all the elements which are not a span before appending
  $(this).append(newClone);
}

此外,不要在 div#droppable 中写入 drop ,而是使用这样的跨度

<div id="droppable">
  <span>drop</span>
</div>

这是一个演示http://jsfiddle.net/dhirajbodicherla/e3pf6ays/14/

于 2015-07-04T14:39:33.000 回答
1

您正在使用以下代码一个接一个地添加克隆。

$(this).after(newClone);

您需要做的就是:清空可放置容器,然后添加新的克隆,如下所示:

drop: function(event, ui) {
    var newClone = $(ui.helper).clone();
    makeDraggable(newClone);
    $(this).empty().append(newClone);
}

更新的小提琴

于 2015-07-04T14:44:42.923 回答
1

我不会像其他答案那样简单地清空droppable目标区域,而是将一个类添加到丢弃的项目中,然后在dragstart发生新事件时将其删除draggablefadeOut()此外,在选择新的可拖动对象时添加一个小事件也很不错。但是,正如Ishettyl 所指出的,fadeIn()如果用户决定不放下可拖动元素,则还必须再次使用该元素。这可以使用自定义revert函数来完成(见下文)。

结果是这样的:

在此处输入图像描述

在我看来,这看起来更优雅,并且不会让用户混淆是否允许更多项目。

代码

$(function() {
    $(".draggable img").draggable({ 
        revert: function (socketObj) {
            if (!socketObj) {
                if ($(this).hasClass("droppedItems")) {
                    $(this).fadeOut(function() {
                        $(this).remove();
                    });
                } else {
                    $(".droppedItems").fadeIn();
                    return true;   
                }
            }
        },
        helper: "clone",
        start: function(event, ui) {
            $(".droppedItems").fadeOut();
        }
    }); 
    $( "#droppable" ).droppable({
        activeClass: "ui-state-default",
        hoverClass: "ui-state-hover",
        drop: function(event, ui) {
            $(".droppedItems").remove();
            var newClone = $(ui.helper).clone();
            newClone.addClass("droppedItems");
            $(this).append(newClone);
        }
    });
});

演示

于 2015-07-04T15:06:19.343 回答