jQuery ui.статус мероприятия перетаскивать на возврат
Есть ли способ получить информацию, если элемент, который можно перетащить, возвращается?
Я застрял на этом. Я хочу сделать элемент droppable снова, но только если draggable, который лежал там, перемещается в другое место (то есть не возвращается).
3 ответа:
Не похоже, что jQuery UI поддерживает его, поэтому вы можете добавить его самостоятельно следующим образом:
$.ui.draggable.prototype._mouseStop = function(event) { //If we are using droppables, inform the manager about the drop var dropped = false; if ($.ui.ddmanager && !this.options.dropBehaviour) dropped = $.ui.ddmanager.drop(this, event); //if a drop comes from outside (a sortable) if(this.dropped) { dropped = this.dropped; this.dropped = false; } if((this.options.revert == "invalid" && !dropped) || (this.options.revert == "valid" && dropped) || this.options.revert === true || ($.isFunction(this.options.revert) && this.options.revert.call(this.element, dropped))) { var self = this; self._trigger("reverting", event); $(this.helper).animate(this.originalPosition, parseInt(this.options.revertDuration, 10), function() { event.reverted = true; self._trigger("stop", event); self._clear(); }); } else { this._trigger("stop", event); this._clear(); } return false; }
Позволит вам сделать это:
$(document).ready(function($) { $('#draggable').draggable({ revert: true, reverting: function() { console.log('reverted'); }, stop: function(event) { if (event.reverted) { console.log('reverted'); } } }); });
Я обнаружил, что существует , чтобы получить информацию о том, вернулся ли объект или нет. Он встроен в jQuery, но, по-видимому, не так хорошо документирован.
По существу, это делается с помощью функции обратного вызова для опции revert перетаскиваемого объекта.
Примерно следующее:
$(".myselector").draggable( { revert: function(droppableObj) { //if false then no socket object drop occurred. if(droppableObj === false) { //revert the .myselector object by returning true return true; } else { //droppableObj was returned, //we can perform additional checks here if we like //alert(droppableObj.attr('id')); would work fine //return false so that the .myselector object does not revert return false; } } });
См. http://www.agilepro.com/blog/2009/12/while-this-functionality-is-built-into.html для более подробной информации.
Расширяя решение @mbeedub, вот мое собственное решение. В моем случае мне нужно значение
ui.position
наstop
. Если перетаскивание отменено, то мне нужно вернуть объект в исходное положение. К сожалению, пользовательский интерфейс jQuery не обновляет свойствоposition
после запуска анимации revert. К счастью, есть свойствоoriginalPosition
. Так что пока я могу обнаружить состояние возврата (в данном случае через classname), я в порядке!function updatePosition (position) { /* Posting position to server */ } element.draggable({ drag: function (event, ui) { updatePosition(ui.position); }, revert: function (droppable) { return !droppable && element.addClass('ui-draggable-reverted'); }, stop: function (event, ui) { if (element.is('.ui-draggable-reverted')) { updatePosition(ui.originalPosition); element.removeClass('ui-draggable-reverted'); } else { updatePosition(ui.position); } } });