Jquery ui jQuery UI可拖动锁定div
我写了一些这样的东西:但当元素被拖到适当的容器中时,我们可以通过将其他div拖到它的区域来覆盖它。你们能告诉我如何阻止拖拽的元素吗?若有人试图覆盖任何元素,div会返回到未拖拽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 {
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更新了我的答案。这只是向您展示概念证明。将来,我会先尝试一下。“你能帮我吗”更像是,你能帮我写这段代码吗。