Как насчет этого:
$(function() {
$(".draggable").draggable();
$(".item").droppable({
drop: function(event, ui) {
var $this = $(this);
$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"
});
}
});
});
Редактировать: Я заметил, у вас есть текст в цель div
. Если вы хотите, чтобы это работало с другими элементами в буксируемом элементе, вы можете расположить перетаскиваемый элемент абсолютно и сместить его, используя left
и top
родительского элемента:
var width = $this.width();
var height = $this.height();
var top = $this.offset().top;
var left = $this.offset().left;
var cntrLeft = (width / 2 - ui.draggable.width() / 2) + left;
var cntrTop = (height / 2 - ui.draggable.height() / 2) + top;
И
ui.draggable.css({
left: cntrLeft + "px",
top: cntrTop + "px",
zIndex:1,
position: 'absolute'
});
Примечания:
ui.draggable
- перетаскиваемый предмет, который был брошен на предмет падения.
$this.append(ui.draggable)
добавляет перетаскиваемый объект к предмету сброса div
, так что позиционирование может быть выполнено точно.
Проверьте живой пример здесь: http://jsfiddle.net/andrewwhitaker/F3sD3/