从区域取消附加JQuery拖放项目,而不删除或隐藏它

我正在做一个项目,要求我将div移到某个区域,让它们调整大小到该区域的大小,然后再捕捉到该区域。

我遇到的问题是,当底部区域的物品从该区域中移出时,它们会在屏幕上“跳跃”,就好像它们在补偿其他区域所占的区域一样。我知道这不是一个很好的描述,所以我有一个JSfiddle。

要复制,请将2项放入右侧区域,然后删除底部的一项。当您将其拿出区域时,当前持有的项目将在屏幕上向上移动。

HTML:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <meta http-equiv="x-ua-compatible" content="IE=edge,chrome=1">
        <title>Creator</title>
        <meta name="description" content="">
        <meta name="viewport" content="width=device-width,initial-scale=1">
        <link rel="apple-touch-icon" href="apple-touch-icon.png">

        <link rel="stylesheet" href="css/styles.css">
        <link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/themes/smoothness/jquery-ui.css">
        <link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/jquerymobile/1.4.5/jquery.mobile.min.css">
    </head>

    <body>
        <div class="drag-area">
            <div id="snaptarget" class="ui-widget-header">
            </div>

            <br style="clear:both">

            <div id="draggable" class="draggable ui-widget-content">
                <p>A</p>
            </div>

            <div id="draggable2" class="draggable ui-widget-content">
                <p>B</p>
            </div>

            <div id="draggable3" class="draggable ui-widget-content">
                <p>C</p>
            </div>

            <div id="draggable4" class="draggable ui-widget-content">
                <p>D</p>
            </div>

            <div id="draggable5" class="draggable ui-widget-content">
                <p>E</p>
            </div>
        </div>

        <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
        <script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js"></script>
        <script src="js/main.js"></script>
    </body>
</html>

CSS:

.drag-area {
  min-height: 100vh;
    display: grid;
    grid-template-columns: 300px auto 300px;
    grid-template-rows: 150px auto;
}

.draggable {
    grid-column: 1;
    grid-row: 1;
  width: 80px;
  height: 80px;
  display: inline-block;
  margin: 0 10px 10px 0;
  font-size: .9em;
}

.ui-widget-header p,.ui-widget-content p {
  margin: 0;
}

#snaptarget {
  width: 173px;
    height: 100vh;
    grid-column: 3;
  position: relative;
}

jQuery / JS:

$(function() {
  $(".draggable").draggable();
    $(".draggable").resizable();
  $("#snaptarget").droppable({
    accept: ".draggable",drop: function(e,ui) { //use add class to add tabs maybe?
        var $item = ui.draggable;
        $item.appendTo($(this)).css({
            margin: 0,position: "relative",top: 0 + "px",left: 0 + "px",width: $(this).width() + "px"
        });
    },out: function(e,ui){
        var $item = ui.draggable;
        var position = $item.offset();
        var x = position.left;
        var y = position.top;
        $item.css({
            position: "absolute",top: y + "px",left: x + "px"
        });
    }
  });
});

JSFiddle:https://jsfiddle.net/9pk6zt5a/

问题似乎是每个项目在连接时都计算出其相对于区域的x和y位置,这是我要执行的操作,以使其紧贴顶部。将其拖出会将其位置更改为绝对位置,以防止其干扰该区域中的其他项目。

理想情况下,解决此问题的最佳方法是以某种方式分离它,并在将其连接到该区域之前将其恢复为原来的形式。我找不到办法。

我试图通过使用偏移量并更改位置来对其进行修复,但均无济于事。

作为旁注,是否有一种更简单的方法来完成这样的反应?我不知道有什么反应,但是我愿意学习它是否会减少这种挫败感。

okraa 回答:从区域取消附加JQuery拖放项目,而不删除或隐藏它

尝试通过将项目放回类似于以下内容的.drag区域来还原该过程:

$(function () {
    $(".draggable").draggable();
    $(".draggable").resizable();

    // Make the area droppable so that you can drop back the items
    $('.drag-area').droppable({
        accept: ".draggable",drop: function (e,ui) {
            if(!ui.draggable.parents().first().hasClass('drag-area')){
                ui.draggable.appendTo($(this)).removeAttr('style');
            }
        }
    });

    $("#snaptarget").droppable({
        accept: ".draggable",ui) { //use add class to add tabs maybe?
            var $item = ui.draggable;
            $item.appendTo($(this)).removeAttr('style').css({
                top: ui.offset.top + "px"
            });
        },});
});

https://jsfiddle.net/L932c0wr/7/

本文链接:https://www.f2er.com/3092943.html

大家都在问