【发布时间】:2013-01-05 02:30:37
【问题描述】:
HTML:
<div class="character_list">
<div id="draggable" class="character_list_container">
<div><img class="1" src="http://ahna.web44.net//img/charas/13.png" /></div>
<div><img class="2" src="http://ahna.web44.net//img/charas/13.png" /></div>
<div><img class="3" src="http://ahna.web44.net//img/charas/13.png" /></div>
<div><img class="4" src="http://ahna.web44.net//img/charas/13.png" /></div>
<div><img class="5" src="http://ahna.web44.net//img/charas/13.png" /></div>
<div><img class="6" src="http://ahna.web44.net//img/charas/13.png" /></div>
</div>
<div id="droppable_slots" class="current_team">
<div id="slot" class="1">1</div>
<div id="slot" class="2">2</div>
<div id="slot" class="3">3</div>
</div>
</div>
jQuery:
$(function() {
$("#draggable>div>img").draggable({
start: function(){
$(this).css({display: 'none'});
},
stop: function(){
$(this).css({display: 'block'});
},
revert: function(dropped) {
var dropped = dropped && dropped[0].id== "slot";
if(!dropped) {
$(this).appendTo($(this).data('originalParent'))
}
return !dropped;
},
helper: function() { return $(this).clone().appendTo('body').show(); },
containment: '.sel_screen_left'
}).each(function() {
$(this).data('originalParent', $(this).parent())
});
$("#droppable_slots>div").droppable({
drop: function(event, ui) {
var $this = $(this);
var content = $.trim($this.html()).length;
if(content > 0) {
$this.html("");
}
$this.append(ui.draggable);
var width = $this.width();
var height = $this.height();
var cntrLeft = (width / 2) - (ui.draggable.width() / 2);
var cntrTop = (height / 2) - (ui.draggable.height() / 2);
ui.draggable.css({
left: cntrLeft + "px",
top: cntrTop + "px"
});
}
});
});
现场示例:http://jsfiddle.net/CVbzg/3/
正如您在 jsfiddle 示例中所见,当图像被放置时,它会完美锁定,但是当您移出放置区域时,它会失去可拖动性,而不是恢复并附加到其原始父级。
有人可以帮忙吗?
【问题讨论】:
-
重复的 ID 是无效的顺便说一句。
-
这不是您的主要问题,但您已将
slotID 分配给 3 个元素。它是无效的 HTML,除了具有该 ID 的第一个元素之外的所有元素都无法使用该 ID 访问。 -
我将如何解决它?还原代码使用它来检查它是否是有效的放置点。
-
可以将其设为课程并与
hasClass核对。我无法重现您的“失去可拖动性”问题,我注意到的唯一问题是由于您将其附加到还原中间的原始容器,它会向后设置动画。这可以通过使用revertDuration:0删除该效果来解决。这是一个没有重复 ID 和动画的小提琴:jsfiddle.net/CVbzg/4 -
哦,当你稍微移出一点时,它会失去可拖动性。此外,如果你把一个放在另一个里面,它们就会消失。
标签: jquery html css jquery-ui drag-and-drop