代码之家  ›  专栏  ›  技术社区  ›  ozan

是否可以在jquery ui中模拟相交的“droppables”?

  •  1
  • ozan  · 技术社区  · 17 年前

    假设我有一个宽度为2x的可拖动对象,它需要放在宽度为3x的区域上,可以放在最左端,也可以放在最右端(另一侧留有x的间隙)。例如,我有一个可拖动的div,它在一个tr上被丢弃,有三个子tds,可以在第一个td和第二个td上同时被丢弃,也可以在第二个td和第三个td上同时被丢弃。有谁能想出一种方法来实现这种效果,在jquery ui上使用一些技巧,或者我需要在较低的级别上工作?用户反馈在这里很重要-悬停在第1和第2 TDS上应该以某种方式传达给用户,这与悬停在第2和第3 TDS上不同。

    1 回复  |  直到 17 年前
        1
  •  1
  •   KyleFarris    17 年前

    因为你只有3个细胞,这个问题很容易解决。您可以简单地将最左边和最右边的单元格设为可删除的元素。现在,当可拖动的鼠标悬停在其中一个单元格上时,可以将其背景色和中间的颜色更改为其他颜色。

    例如,如果你的html是:

    <div id="draggable_thing"><!-- who knows... (probably you...) --></div>
    <tr>
        <td class="left"></td>
        <td class="mid"></td>
        <td class="right"></td>
    </tr>
    

    然后你就可以做如下事情:

    $(function() {
        $("#draggable_thing").draggable();
        $(".right").droppable({
            over: function(event, ui) {
                $(this).toggleClass('over-right-cell');
                $(this).parent().find('.mid').toggleClass('over-right-cell');
            }
            out: function(event,ui) {
               $(this).toggleClass('over-right-cell');
               $(this).parent().find('.mid').toggleClass('over-right-cell'); 
            }
        });
        $(".left").droppable({
            over: function(event, ui) {
                $(this).toggleClass('over-left-cell');
                $(this).parent().find('.mid').toggleClass('over-left-cell');
            }
            out: function(event,ui) {
               $(this).toggleClass('over-left-cell');
               $(this).parent().find('.mid').toggleClass('over-left-cell'); 
            }
        });
    });
    

    然后你只需要几个不同的css类,让用户知道操作是不同的。像这样难看的东西就足够演示了:

    .over-right-cell { background-color: blue; }
    .over-left-cell  { background-color: green; }
    

    祝你好运!