我有两列,即jquery-ui可排序。在左栏中是选择项目,右侧是所有未选择的项目。您可以在两者之间移动项目(li
元素)。每个元素可以在左侧列或右侧列中。左列中的第一个元素(选择)不可排序,无法移动(名称ID)。左列中的元素与右列中的元素具有不同的样式,左列中的每个li
元素都在自行上,但在右列中它们是浮动的。
这是一张图片:
一切都运行正常,但是当用户在列之间移动元素时,我需要元素更改其样式(当移动=鼠标左键按下时),当左上或右列时。通过改变它的风格我的意思是,当f.e.我开始从左到右移动元素Telefón
,当我将在右列上时,此元素应将其背景颜色更改为灰色并且不显示在整行中,而是仅显示在其宽度中,反之亦然。 / p>
我无法弄清楚,如何做到这一点。感谢。
答案 0 :(得分:1)
由于您使用的是jQuery UI,因此您可以利用 droppable 小部件。这包含两个回调,over
和out
。只要可拖动区域超出或拖出可拖动区域,就更改它的CSS属性。
看到它正常工作here。
$(".columns_all").droppable({
over: function (event, ui) {
ui.helper.css("background-color", "lightblue");
},
out: function (event, ui) {
ui.helper.css("background-color", "");
}
});
根据要求,这是一个双向拖动的代码。
elwidth = $(".columns_selected li").width(); // used to set element width
// left to right
$(".columns_all").droppable({
over: function (event, ui) {
ui.helper.css({
"background-color": "lightblue",
width: "auto"
});
},
out: function (event, ui) {
ui.helper.css({
"background-color": "",
width: elwidth
});
},
drop: function (event, ui) {
ui.helper.css({
"background-color": "#ccc"
});
}
});
// right to left
$(".columns_selected").droppable({
over: function (event, ui) {
ui.helper.css({
"background-color": "red",
width: elwidth
});
},
out: function (event, ui) {
ui.helper.css({
"background-color": "",
width: "auto"
});
},
drop: function (event, ui) {
ui.helper.css({
"background-color": "#74ce9c"
});
}
});
更新了fiddle。
答案 1 :(得分:1)
您可以将此添加到您的可排序选项中:
over: function (event, ui) {
if ($(ui.item).closest("ul").hasClass("interested")) {
$(ui.item).detach().appendTo("#categories-source");
$(ui.item).css("width", "initial");
} else {
$(ui.item).detach().appendTo("#categories-chosen");
$(ui.item).css("width", "210px");
$(ui.item).css("height", "initial");
}
}
它会将拖动的元素置于正确的ul
中,具体取决于前一个元素是否具有类interested
。
<强>更新强>
还为拖动的元素设置适当的尺寸(因为左边的列表是每行一个)。