【问题标题】:Drag multiple divs into another jQuery将多个 div 拖入另一个 jQuery
【发布时间】:2018-11-26 13:43:12
【问题描述】:

我一直在尝试使用 jQuery 将 div 从一个 div 拖到另一个 div。这是我到目前为止所得到的

$(document).ready(function() {
  $(".draggable").draggable();
  $(".bucket").droppable({
    drop: function(event, ui) {
      if (($(this).attr('id')) !== ui.draggable.attr("data-bucket")) {
        ui.draggable.attr("data-bucket", $(this).attr('id'));

        var p1 = ui.draggable.parent().offset();
        $(this).append(ui.draggable);

        var p2 = ui.draggable.parent().offset();

        ui.draggable.css({
          top: parseInt(ui.draggable.css('top')) + (p1.top - p2.top),
          left: parseInt(ui.draggable.css('left')) + (p1.left - p2.left)
        });
      }
    }
  });
});
.bucket {
  width: 400px;
  height: 150px;
  background: #ddd
}

.draggable {
  width: 50px;
  height: 30px;
  margin-top: 5px;
  background: red;
}

#destination {
  background: #aaa
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://code.jquery.com/ui/1.12.0/jquery-ui.min.js"></script>
<div class="bucket" id="origin">
  <div class="draggable" data-bucket="origin">Drop 1</div>
  <div class="draggable" data-bucket="origin">Drop 2</div>
  <div class="draggable" data-bucket="origin">Drop 3</div>
  <div class="draggable" data-bucket="origin">Drop 4</div>
</div>
<div class="bucket" id="destination">
</div>

我已经改编了来自this 答案的js,但是为了处理多个可拖动元素,我使用data-bucket 属性仅在元素最初放入桶时应用定位,而不是每次都在里面转来转去。

从示例中可以看出,这种解决方案有点工作,但是一旦将两个以上的 div 拖到目标存储桶中,它们就会开始跳来跳去,并且不会落在光标所在的位置

这似乎应该是一个简单的修复,但我已经在这个问题上摸索了一天左右,有什么帮助吗?

【问题讨论】:

    标签: javascript jquery jquery-ui-draggable jquery-ui-droppable


    【解决方案1】:

    我已将 .draggable div 的 CSS 设置为 position: absolute,将父母设置为 position: relative。还对初始显示绝对定位的 div 和显示它们被删除后的状态进行了一些调整。

    请看下面的代码:

        $(document).ready(function () {
            $.each( $(".draggable"), function( key, value ) {
                $(this).css('top',(35*key)+"px");
            });
            $(".draggable").mousedown(function() {
                $("#status").html('');
            })
    
            $(".draggable").draggable();
            $(".bucket").droppable({
                drop: function (event, ui) {
                    $("#status").html(ui.draggable.html()+" is in the "+$(this).attr('id')+" bucket.");
    
                    if (($(this).attr('id')) !== ui.draggable.attr("data-bucket")) {
                        ui.draggable.attr("data-bucket", $(this).attr('id'));
    
                        var p1 = ui.draggable.parent().offset();
                        $(this).append(ui.draggable);
    
                        var p2 = ui.draggable.parent().offset();
    
                        ui.draggable.css({
                            top: parseInt(ui.draggable.css('top')) + (p1.top - p2.top),
                            left: parseInt(ui.draggable.css('left')) + (p1.left - p2.left)
                        });
                    }
                }
            });
        });
        .bucket {
            width: 400px;
            height: 150px;
            background: #ddd;
            position: relative;
        }
    
        .draggable {
            width: 50px;
            height: 30px;
            margin-top: 5px;
            background: red;
            position: absolute;
            z-index: 10;
        }
    
        #destination {
            background: #aaa;
            position: relative;
        }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <script src="https://code.jquery.com/ui/1.12.0/jquery-ui.min.js"></script>
    <div class="bucket" id="origin">
        <div class="draggable" data-bucket="origin">Drop 1</div>
        <div class="draggable" data-bucket="origin">Drop 2</div>
        <div class="draggable" data-bucket="origin">Drop 3</div>
        <div class="draggable" data-bucket="origin">Drop 4</div>
    </div>
    <div class="bucket" id="destination">
    </div>
    
    <pre id="status"></pre>

    【讨论】:

    • 我从没想过 CSS 是问题所在,真是太好了
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多