0

我正在使用 jQuery 可拖放/可拖放来启用网格中的元素进行交换。例如,当元素 1 被放到元素 2 上时,它们会改变位置。

有两个问题:

  1. 成功拖放后,克隆仍会漂浮回其原始位置。我怎样才能防止这种情况?如果它没有落到有效目标上,我只希望它飘回来。

  2. 理想情况下我也想设置helper: original,但是当我尝试这个时,我无法弄清楚如何正确计算drop函数中的交换位置。

我已将代码放在jsFiddle上,供参考:

<div id="room"></div>

<script>
$(function() {
//Set up seats - four rows of eight
for (var row = 0; row < 4; row++) {
    for (var col = 0; col < 8; col++) {
        $('#room').append('<div class="seat" style="top: ' + (row * 45 + 15) + 'px; left: ' + (col * 117 + 18) + 'px;">' + (row * 4 + col + 1) + '</div>');
    }
}

//Swap function from http://blog.pengoworks.com/index.cfm/2008/9/24/A-quick-and-dirty-swap-method-for-jQuery
jQuery.fn.swap = function(b) {
    b = jQuery(b)[0];
    var a = this[0];
    var t = a.parentNode.insertBefore(document.createTextNode(''), a);
    b.parentNode.insertBefore(a, b);
    t.parentNode.insertBefore(b, t);
    t.parentNode.removeChild(t);
    return this;
};

$(".seat").draggable({
    revert: true,
    helper: "clone"
});

$(".seat").droppable({
    accept: ".seat",
    hoverClass: "ui-state-hover",
    drop: function(event, ui) {

        var draggable = ui.draggable,
            droppable = $(this),
            dragPos = draggable.position(),
            dropPos = droppable.position();

        draggable.css({
            left: dropPos.left + 'px',
            top: dropPos.top + 'px'
        });

        droppable.css({
            left: dragPos.left + 'px',
            top: dragPos.top + 'px'
        });
        draggable.swap(droppable);
    }
});

});
</script>
4

1 回答 1

0

$(ui.helper).hide();我在drop函数中解决了这个问题。

于 2011-12-18T10:53:58.213 回答