使用jQuery UI交换项目时防止克隆浮动

时间:2011-12-17 13:58:05

标签: jquery jquery-ui jquery-ui-draggable jquery-ui-droppable

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

有两个问题:

  1. 成功拖放后,克隆仍然会浮动 回到原来的位置。我怎么能阻止这个?我只想要 如果没有掉到有效的目标上,它就会浮起来。

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

  3. 我已将代码放在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>
    

1 个答案:

答案 0 :(得分:0)

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

相关问题