这可以通过简单的调用来实现.animate()(毕竟,jQueryUI都在做)和一些逻辑来跟踪你正在拖动的元素的原始位置(jQueryUI已经为你部分处理了).
跟踪使用拖动元素的原始位置.data()和.drop()你的活动droppable对象:
$("#drop").droppable({
drop: function(event, ui) {
if (!ui.draggable.data("originalPosition")) {
ui.draggable.data("originalPosition",
ui.draggable.data("draggable").originalPosition);
}
}
});
Run Code Online (Sandbox Code Playgroud)
基本上这只是在拖动元素上设置称为"originalPosition"的数据.这假设您可以继续在有效放置区域内拖动元素(因此在继续拖动后它不会覆盖原始位置).
创建一个您调用的函数,将拖动的对象设置为原始位置的动画:
function revertDraggable($selector) {
$selector.each(function() {
var $this = $(this),
position = $this.data("originalPosition");
if (position) {
$this.animate({
left: position.left,
top: position.top
}, 500, function() {
$this.data("originalPosition", null);
});
}
});
}
Run Code Online (Sandbox Code Playgroud)
根据自己的喜好调整动画的速度.
从事件处理程序调用该函数:
$("#undo").click(function() {
revertDraggable($(".drag"));
});
Run Code Online (Sandbox Code Playgroud)这是一个有效的例子:http://jsfiddle.net/v7N6w/