Jquery ui jQuery UI可拖动锁定div

Jquery ui jQuery UI可拖动锁定div,jquery-ui,Jquery Ui,我写了一些这样的东西:但当元素被拖到适当的容器中时,我们可以通过将其他div拖到它的区域来覆盖它。你们能告诉我如何阻止拖拽的元素吗?若有人试图覆盖任何元素,div会返回到未拖拽div的区域吗 if (!ui.draggable.closest('.empty').length) item = item.draggable()' 有一个简单的方法可以做到这一点。基本上,我们将删除类empty,并使用disable方法 工作示例: 轻微CSS更改 .filled .item .closer {

我写了一些这样的东西:但当元素被拖到适当的容器中时,我们可以通过将其他div拖到它的区域来覆盖它。你们能告诉我如何阻止拖拽的元素吗?若有人试图覆盖任何元素,div会返回到未拖拽div的区域吗

if (!ui.draggable.closest('.empty').length) item = item.draggable()'

有一个简单的方法可以做到这一点。基本上,我们将删除类
empty
,并使用
disable
方法

工作示例:

轻微CSS更改

.filled .item .closer {
  display: block;
}
下降功能

  drop: function(ev, ui) {
    if ($(this).hasClass("empty")) {
      $(this).removeClass("empty").addClass("filled");
      $(this).droppable("disable");
    } else {
      return false;
    }
    var item = ui.draggable;
    if (!ui.draggable.closest('.empty').length) item = item.draggable(); // if item was dragged from the source list - clone it
    this.innerHTML = ''; // clean the placeholder
    item.css({
      top: 0,
      left: 0
    }).appendTo(this); // append item to placeholder
  }
交换类允许出现
X
按钮。然后,我们运行
disable
方法以确保此特定项不再接受拖动的项。如果用户将项目拖动到此位置,则该项目将被还原

更新

.filled .item .closer {
  display: block;
}
使用可排序:

HTML

<div id="dragItems" class="source">
  <div class="item">Item 1</div>
  <div class="item">Item 2</div>
  <div class="item">Item 3</div>
  <div class="item">Item 4</div>
  <div class="item">Item 5</div>
</div>
<div id="sortItems" class="target">
</div>
jQuery

$(function() {
  $("#sortItems").sortable({
    axis: "y",
    items: "> div",
    placeholder: "empty",
    dropOnEmpty: true,
    stop: function(e, ui) {
      var $it = ui.item;
      if ($it.find(".closer").length == 0) {
        var closeBtn = $("<span>", {
          class: "closer"
        });
        $it.append(closeBtn);
        closeBtn.button({
          icon: "ui-icon-close",
          label: "Close",
          showLabel: false
        }).click(function(ev) {
          console.log("[INFO]: Closing ", $it);
          $it.fadeTo(200, 0.0, function() {
            $it.remove();
            $("#sortItems").sortable("refresh");
          });
        });
      }
    }
  });

  $("#dragItems .item").draggable({
    connectToSortable: "#sortItems",
    revert: "invalid"
  });

  $("#sortItems").disableSelection();
});
$(函数(){
$(“#sortItems”)。可排序({
轴:“y”,
项目:“>div”,
占位符:“空”,
真的,
停止:功能(e、ui){
var$it=ui.item;
if($it.find(“.closer”).length==0){
var closeBtn=$(“”{
班级:“更接近”
});
$it.append(closeBtn);
关闭按钮({
图标:“ui图标关闭”,
标签:“关闭”,
showLabel:错误
}).单击(功能(ev){
console.log(“[INFO]:Closing”,$it);
$it.fadeTo(200,0.0,函数(){
$it.remove();
$(“#sortItems”)。可排序(“刷新”);
});
});
}
}
});
$(“#dragItems.item”).draggable({
connectToSortable:“#sortItems”,
回复:“无效”
});
$(“#sortItems”).disableSelection();
});

有一种简单的方法可以做到这一点。基本上,我们将删除类
empty
,并使用
disable
方法

工作示例:

轻微CSS更改

.filled .item .closer {
  display: block;
}
下降功能

  drop: function(ev, ui) {
    if ($(this).hasClass("empty")) {
      $(this).removeClass("empty").addClass("filled");
      $(this).droppable("disable");
    } else {
      return false;
    }
    var item = ui.draggable;
    if (!ui.draggable.closest('.empty').length) item = item.draggable(); // if item was dragged from the source list - clone it
    this.innerHTML = ''; // clean the placeholder
    item.css({
      top: 0,
      left: 0
    }).appendTo(this); // append item to placeholder
  }
交换类允许出现
X
按钮。然后,我们运行
disable
方法以确保此特定项不再接受拖动的项。如果用户将项目拖动到此位置,则该项目将被还原

更新

.filled .item .closer {
  display: block;
}
使用可排序:

HTML

<div id="dragItems" class="source">
  <div class="item">Item 1</div>
  <div class="item">Item 2</div>
  <div class="item">Item 3</div>
  <div class="item">Item 4</div>
  <div class="item">Item 5</div>
</div>
<div id="sortItems" class="target">
</div>
jQuery

$(function() {
  $("#sortItems").sortable({
    axis: "y",
    items: "> div",
    placeholder: "empty",
    dropOnEmpty: true,
    stop: function(e, ui) {
      var $it = ui.item;
      if ($it.find(".closer").length == 0) {
        var closeBtn = $("<span>", {
          class: "closer"
        });
        $it.append(closeBtn);
        closeBtn.button({
          icon: "ui-icon-close",
          label: "Close",
          showLabel: false
        }).click(function(ev) {
          console.log("[INFO]: Closing ", $it);
          $it.fadeTo(200, 0.0, function() {
            $it.remove();
            $("#sortItems").sortable("refresh");
          });
        });
      }
    }
  });

  $("#dragItems .item").draggable({
    connectToSortable: "#sortItems",
    revert: "invalid"
  });

  $("#sortItems").disableSelection();
});
$(函数(){
$(“#sortItems”)。可排序({
轴:“y”,
项目:“>div”,
占位符:“空”,
真的,
停止:功能(e、ui){
var$it=ui.item;
if($it.find(“.closer”).length==0){
var closeBtn=$(“”{
班级:“更接近”
});
$it.append(closeBtn);
关闭按钮({
图标:“ui图标关闭”,
标签:“关闭”,
showLabel:错误
}).单击(功能(ev){
console.log(“[INFO]:Closing”,$it);
$it.fadeTo(200,0.0,函数(){
$it.remove();
$(“#sortItems”)。可排序(“刷新”);
});
});
}
}
});
$(“#dragItems.item”).draggable({
connectToSortable:“#sortItems”,
回复:“无效”
});
$(“#sortItems”).disableSelection();
});

我认为
sortable()
可能比
droppable()
更好。为了澄清这一点,如果
.target
中的某个槽已填满,则您希望将拖动的项目还原?准确地说,并且可以更改
.item
.target
中的位置。我认为
可排序()
可能是比
可拖放()
更好的选择。为了澄清这一点,如果
.target
中的某个槽已填满,则您希望将拖动的项目完全还原,并且可以更改
.item
.target
中的位置,但如果单击x按钮,元素将消失,元素所在的空格也将消失。我的目标是移除x按钮,但当我改变元素位置时,但在这种情况下,元素所在的空间也将消失…@jdoe您最初的问题并没有解决这些问题。我看到了他们和其他一些人,但没有提及他们,因为他们不在你的帖子范围内。因此,我认为
sortable()
是一个更好的潜在解决方案。但我不想假设。好吧,但对我来说很清楚,我理解你。你能帮我看看怎么做吗?@jdoe更新了我的答案。这只是向您展示概念证明。将来,我会先尝试一下。“你们能帮我吗”更像是,你们能帮我写这段代码吗?但若你们点击x按钮,元素就会消失,元素所在的空间也会消失。我的目标是移除x按钮,但当我改变元素位置时,但在这种情况下,元素所在的空间也将消失…@jdoe您最初的问题并没有解决这些问题。我看到了他们和其他一些人,但没有提及他们,因为他们不在你的帖子范围内。因此,我认为
sortable()
是一个更好的潜在解决方案。但我不想假设。好吧,但对我来说很清楚,我理解你。你能帮我看看怎么做吗?@jdoe更新了我的答案。这只是向您展示概念证明。将来,我会先尝试一下。“你能帮我吗”更像是,你能帮我写这段代码吗。