我有4张图片。用户可以将它们拖放到另一个列表并更改图像的顺序。目标是用户选择图像的顺序。问题是当这些图像彼此放置时,我无法交换这些图像。
<ul id="choices">
<li><img src="http://placehold.it/200x200&text=1" /></li>
<li><img src="http://placehold.it/200x200&text=2" /></li>
<li><img src="http://placehold.it/200x200&text=3" /></li>
<li><img src="http://placehold.it/200x200&text=4" /></li>
</ul>
<ul id="answers">
<li></li>
<li></li>
<li></li>
<li></li>
</ul>
(function ($) {
$("#choices li img").draggable({
revert: true,
zIndex: 10,
snap: "#answers li",
snapMode: "inner",
snapTolerance: 40
});
$("#answers li").droppable({
drop: function (event, ui) {
var dropped = ui.draggable;
var droppedOn = this;
if ($(droppedOn).children().length > 0) {
alert("I need to swap these");
}
$(dropped).detach().css({
top: 0,
left: 0
}).prependTo($(droppedOn));
}
});
})(jQuery);
img {
display: block;
z-index: 3;
}
#choices, #answers {
display:block;
padding: 0;
margin: 0;
}
#choices li, #answers li {
display: inline-block;
height: 200px;
width: 200px;
margin: 10px;
background: #515151;
}
#answers li {
position: relative;
}
答案 0 :(得分:6)
我的解决方案可能不是最优雅的(也许某人可以提供更直观的东西?),但它似乎有效;)
小提琴:http://jsfiddle.net/W9Z46/14/
(function ($) {
var lastPlace;
$("#choises li img").draggable({
revert: true,
zIndex: 10,
snap: "#answers li",
snapMode: "inner",
snapTolerance: 40,
start: function (event, ui) {
lastPlace = $(this).parent();
}
});
$("#answers li").droppable({
drop: function (event, ui) {
var dropped = ui.draggable;
var droppedOn = this;
if ($(droppedOn).children().length > 0) {
$(droppedOn).children().detach().prependTo($(lastPlace));
}
$(dropped).detach().css({
top: 0,
left: 0
}).prependTo($(droppedOn));
}
});
})(jQuery);
正如你所看到的那样,我只是保留你在变量lastPlace
中开始拖拽的地方,然后当你放下并检查某些东西时,你将它放在你之前开始拖动的地方。
答案 1 :(得分:0)
您应该尝试在接收列表中使用sortable而不是droppable。这应该会为您提供所需的功能。
答案 2 :(得分:0)
我也遇到了同样的问题。但我的代码有点不同。
$(document).ready(function(){
var x=[60,270,480];
var y=[170,170,170];
$(".draggable").draggable({
revert:"invalid",
start:function(){
}
});
$(".droppable").droppable({
accept:".draggable",
hoverClass:"active",
drop:function(ev,ui){
if($(this).attr("name")!=null){
var d=$(this).attr("name");
var dgid=$(ui.draggable).attr("data-id")-1;
$("#"+d).animate({left:x[dgid],top:y[dgid]});
$("#drop"+$(ui.draggable).attr("data-id")).attr("name",$(this).attr("name"));
$("#"+d).attr("data-id",$(ui.draggable).attr("data-id"));
}
var dpid=$(this).attr("data-id")-1;
$(this).attr("name",$(ui.draggable).attr("id"));
$(ui.draggable).attr("data-id",$(this).attr("data-id"));
$(ui.draggable).animate({left:x[dpid],top:y[dpid]},300);
}
});
});
查看Fiddle