jQuery, сохраняя исходное положение нескольких перетаскиваемых объектов, чтобы вернуть их обратно

Пожалуйста, смотрите jsfiddle

Как только я бросаю «перетаскиваемый» объект на цель, эта конкретная позиция используется в следующий раз при возврате назад. Есть ли способ сохранить исходные позиции перетаскиваемых объектов и всегда возвращать их обратно (самые первые позиции)? Или есть какое-то другое решение, кроме «сохранения их» для достижения той же цели?

Я нашел нечто похожее вопрос, но позиции (слева, сверху) жестко закодированы в них, чтобы вернуться назад. Я очень старался, но не нашел решения.

Спасибо.




Ответы (2)


Я предполагаю, что когда вы бросаете свой перетаскиваемый объект на цель, вы не хотите, чтобы он возвращался, но после того, как вы перемещаете его обратно из цели, вы хотите, чтобы он вернулся в исходное положение с остальной частью перетаскиваемые?

Если это так, код в этом ответе — это то, что вам нужно, и хотя значения 0, 0 для верхнего и левые местоположения кажутся жестко закодированными, они необходимы, так как атрибуты CSS position перетаскиваемых объектов получают значение relative после того, как они были превращены в перетаскиваемые объекты, поэтому установка для них обратно значения 0, 0 будет перемещать их обратно в исходное положение. исходные позиции.

Вот пример jsfiddle, а также измененный код в вашем примере:

$('#target').droppable({

    // you need to set revert to a function as the 'out' event is turning it
    // into a function...
    drop: function(event, ui){
        ui.draggable.draggable('option', 'revert', function(){return false});
    },

    out: function(event, ui){
        ui.draggable.draggable('option', 'revert', function(){
            $(this).data('draggable').originalPosition = {
                top: 0,
                left: 0
            };
            return true;
        });
    }
});

Надеюсь это поможет! Пожалуйста, дайте мне знать, если я полностью промахнулся!

person Chris Kempen    schedule 01.02.2012
comment
Эй, это идеально. Спасибо. - person MPP; 02.02.2012

Ответ Криса Кемпена правильный, но в более новых версиях jQuery вы можете использовать

$(this).data('ui-draggable')

в обратном вызове "out", так как атрибут данных был переименован.

person richterd    schedule 05.04.2017