したがって、少し前後した後、元のui.helper
要素(sortable
作成する)を複製し、このクローン(明らかに元に戻されない)を使用して、元のヘルパーを削除しながらカスタムアニメーションシーケンスを終了することで、これを解決することができました。の復帰アニメーションを非表示にするプレースホルダー(によって作成sortable
) 。sortable
sortable
's revert関数を(キャンセルするのではなく)効果的に実行させているので、私が好んだほどきれいではありませんが、誰かがより良いアイデアを得るまで、これは機能します。
以下のコード:
// default sortable interaction/setup.
$('.sortable-list').sortable({
placeholder: 'sortable-list__item sortable-list__item--placeholder',
revert: true,
helper: 'clone',
tolerance: 'pointer',
connectWith: '.sortable-list',
appendTo: 'body',
zIndex: 1000
});
// dropzone interaction will grab the ui.helper from sortable clone it and then
// reuse it for it's own finish animation while removing the helpers from the
// sortable list and dom.
$('.dropzone')
.droppable({
accept: '.sortable-list__item',
hoverClass: 'dropzone--hover',
activeClass: 'dropzone--active',
tolerance: 'pointer'
})
.on('drop', function(event, ui) {
var $item = ui.draggable, // this is the original item.
$helper = ui.helper; // this is the cloned item the user drags
// clone the helper instance and position it in the same exact spot where
// the user had left it using the ui.position
// (or ui.offset depending on your nesting/positioning of the helper)
var $clone = $helper.clone().css({
"position": "absolute",
"top": ui.position.top,
"left": ui.position.left
}).appendTo('body');
// cleanup the original helper (remove from stage) and hide placeholder
// elements. We're hiding the latter because the revert callback of
// sortable is removing it for us and will otherwise throw an error that
// the placeholder can't be removed because it no longer exists in the DOM.
$helper.remove();
$('.sortable-list__item--placeholder').hide();
// launch into your own animation sequence using the $clone of $helper
// and process the drop data accordingly.
});