【发布时间】:2013-11-28 15:37:44
【问题描述】:
问题
我有 4 张图片。用户可以将它们拖放到另一个列表并更改图像的顺序。目标是用户选择图像的顺序。问题是当它们彼此放置时我无法交换这些图像。
HTML
<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>
jQuery
>(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);
CSS(不是很重要)
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;
}
示例
【问题讨论】:
-
在我继续审查之前,我只是想让你知道'choises' 有一个'c' 哈哈,而且你使用 Sizzle 遍历 DOM 的方式比必要的要多。
$("#choises li img")应该是var $img = $('#choices').find('img'); -
@Deryck 谢谢你:)
-
@Deryck 甚至可以更快,这只是一个例子:) jsPerf
-
@Bondye 哈哈好吧,我不喜欢吹牛,但是嗯……我的 Chrome 31 比其他所有的加起来都长。大声笑
-
请查看我的回答 ;)
标签: jquery jquery-ui jquery-ui-draggable jquery-ui-droppable