如何在我点击和滑动时给td着色?

问题描述 投票:0回答:1

我有一个测试 div 的时候,我可以把它拖到一个表格里。div 掉入标签中,我将目标颜色 <td> 蓝色的。现在,我想让所有其他的TD在我点击、按住和滑动到蓝色的右边或左边时都变成彩色的。<td> 比如调整大小。

所以我的问题是:如何 "调整 "我的蓝色的 "尺寸"。<td>"调整大小 "不是一个好词,因为我想模拟它做着色的其他人。<td> 通过点击和滑动到右边或左边,就像调整大小一样,如果你有一个线索可以遵循,我会很感激。

我试着用jquery ui resizable来放好 div 直接在 td 但我不能用它做我想要的东西(我想?

请看一下代码片段,很难解释我想从jQuery中得到什么。

预先感谢

$(function () {
            // There's the gallery and the trash
            var $job = $("#testblocks"),
                $ressource = $(".ressource");

            // Let the gallery items be draggable
            $("div", $job).draggable({
                cancel: "a.ui-icon", // clicking an icon won't initiate dragging
                revert: "invalid", // when not dropped, the item will revert back to its initial position
                containment: ".containment-wrapper",
                helper: "clone",
                cursor: "move",
                snap: "td",
                scroll: false,
                refreshPositions: true,
                drag: function () {
                    var offset = $(this).offset();
                    var xPos = offset.left;
                    var yPos = offset.top;
                    /*$('#posX').text('x: ' + xPos);
                    $('#posY').text('y: ' + yPos);*/
                }
            });
            /*$("div", $job).resizable({
                handles: 'e, w',
                containment: ".containment-wrapper"
            });*/

            $ressource.droppable({
                hoverClass: 'hovering',
                tolerance: 'pointer',
                accept: "#testblocks > div, .ressource div",
                classes: {
                    "ui-droppable-active": "ui-state-highlight"
                },
                drop: function (event, ui) {
                    //$(ui.draggable).appendTo($(this));
                    $(this).css("background-color", "blue");
                    $(this).next("td").css("background-color", "blue");
                    $(this).next("td").next("td").css("background-color", "blue");
                    $(this).next("td").next("td").next("td").css("background-color", "blue");
                }
            });

            $job.droppable({
                accept: ".ressource div",
                classes: {
                    "ui-droppable-active": "custom-state-active"
                },
                drop: function (event, ui) {
                    $(ui.draggable).appendTo($job);
                }
            });
        });
.drag {
            height: 49px;
            width: 60px;
            text-align: center;
        }

        td {
            border: 1px solid black;
            /*height:50px;*/
            width: 160px;
        }

        th {
            border: 1px solid black;
            /*height:50px;*/
            width: 180px;
        }

        tr {
            border: 1px solid black;
            height: 150px;
        }

        .basr {
            height: 150px;

        }

        .masterContent {
            padding: 0;
            margin: 0;
        }
<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
<script src="https://code.jquery.com/jquery-1.12.4.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<table cellspacing="0" style="border:1px solid black; text-align:center;">
    <tr style="border:1px solid black;">
        <th style="border:1px solid black;"></th>
        <th style="border:1px solid black;">Lundi</th>
        <th style="border:1px solid black;">Mardi</th>
    </tr>
    </thead>
    <tbody>
    <tr>
        <th>Ressource 1</th>
        <td colspan="6" rowspan="4" class="masterContent">
            <table cellspacing="0" style="border:0;width:100%;" class="containment-wrapper">
                <tr>
                    <td><table cellspacing="0" style="border:0;">
                            <tr style="border:0;">
                                <td style='border:0;' class='ressource'></td>
                                <td style='border:0;' class='ressource'></td>
                                <td style='border:0;' class='ressource'></td>
                                <td style='border:0;' class='ressource'></td>
                                <td style='border:0;' class='ressource'></td>
                                <td style='border:0;' class='ressource'></td>
                                <td style='border:0;' class='ressource'></td>
                                <td style='border:0;' class='ressource'></td>
                            </tr>
                        </table>
                    <td><table cellspacing="0" style="border:0;">
                            <tr style="border:0;">
                                <td style='border:0;' class='ressource'></td>
                                <td style='border:0;' class='ressource'></td>
                                <td style='border:0;' class='ressource'></td>
                                <td style='border:0;' class='ressource'></td>
                                <td style='border:0;' class='ressource'></td>
                                <td style='border:0;' class='ressource'></td>
                                <td style='border:0;' class='ressource'></td>
                                <td style='border:0;' class='ressource'></td>
                            </tr>
                        </table></td>
                    <td><table cellspacing="0" style="border:0;">
                            <tr style="border:0;">
                                <td style='border:0;' class='ressource'></td>
                                <td style='border:0;' class='ressource'></td>
                                <td style='border:0;' class='ressource'></td>
                                <td style='border:0;' class='ressource'></td>
                                <td style='border:0;' class='ressource'></td>
                                <td style='border:0;' class='ressource'></td>
                                <td style='border:0;' class='ressource'></td>
                                <td style='border:0;' class='ressource'></td>
                            </tr>
                        </table></td>
                    <td><table cellspacing="0" style="border:0;">
                            <tr style="border:0;">
                                <td style='border:0;' class='ressource'></td>
                                <td style='border:0;' class='ressource'></td>
                                <td style='border:0;' class='ressource'></td>
                                <td style='border:0;' class='ressource'></td>
                                <td style='border:0;' class='ressource'></td>
                                <td style='border:0;' class='ressource'></td>
                                <td style='border:0;' class='ressource'></td>
                                <td style='border:0;' class='ressource'></td>
                            </tr>
                        </table></td>
                    <td><table cellspacing="0" style="border:0;">
                            <tr style="border:0;">
                                <td style='border:0;' class='ressource'></td>
                                <td style='border:0;' class='ressource'></td>
                                <td style='border:0;' class='ressource'></td>
                                <td style='border:0;' class='ressource'></td>
                                <td style='border:0;' class='ressource'></td>
                                <td style='border:0;' class='ressource'></td>
                                <td style='border:0;' class='ressource'></td>
                                <td style='border:0;' class='ressource'></td>
                            </tr>
                        </table></td>
                    <td><table cellspacing="0" style="border:0;">
                            <tr style="border:0;">
                                <td style='border:0;' class='ressource'></td>
                                <td style='border:0;' class='ressource'></td>
                                <td style='border:0;' class='ressource'></td>
                                <td style='border:0;' class='ressource'></td>
                                <td style='border:0;' class='ressource'></td>
                                <td style='border:0;' class='ressource'></td>
                                <td style='border:0;' class='ressource'></td>
                                <td style='border:0;' class='ressource'></td>
                            </tr>
                        </table></td>

                </tr>
                <tr>
                    <td><table cellspacing="0" style="border:0;">
                            <tr style="border:0;">
                                <td style='border:0;' class='ressource'></td>
                                <td style='border:0;' class='ressource'></td>
                                <td style='border:0;' class='ressource'></td>
                                <td style='border:0;' class='ressource'></td>
                                <td style='border:0;' class='ressource'></td>
                                <td style='border:0;' class='ressource'></td>
                                <td style='border:0;' class='ressource'></td>
                                <td style='border:0;' class='ressource'></td>
                            </tr>
                        </table></td>
                    <td><table cellspacing="0" style="border:0;">
                            <tr style="border:0;">
                                <td style='border:0;' class='ressource'></td>
                                <td style='border:0;' class='ressource'></td>
                                <td style='border:0;' class='ressource'></td>
                                <td style='border:0;' class='ressource'></td>
                                <td style='border:0;' class='ressource'></td>
                                <td style='border:0;' class='ressource'></td>
                                <td style='border:0;' class='ressource'></td>
                                <td style='border:0;' class='ressource'></td>
                            </tr>
                        </table></td>
                    <td><table cellspacing="0" style="border:0;">
                            <tr style="border:0;">
                                <td style='border:0;' class='ressource'></td>
                                <td style='border:0;' class='ressource'></td>
                                <td style='border:0;' class='ressource'></td>
                                <td style='border:0;' class='ressource'></td>
                                <td style='border:0;' class='ressource'></td>
                                <td style='border:0;' class='ressource'></td>
                                <td style='border:0;' class='ressource'></td>
                                <td style='border:0;' class='ressource'></td>
                            </tr>
                        </table></td>
                    <td><table cellspacing="0" style="border:0;">
                            <tr style="border:0;">
                                <td style='border:0;' class='ressource'></td>
                                <td style='border:0;' class='ressource'></td>
                                <td style='border:0;' class='ressource'></td>
                                <td style='border:0;' class='ressource'></td>
                                <td style='border:0;' class='ressource'></td>
                                <td style='border:0;' class='ressource'></td>
                                <td style='border:0;' class='ressource'></td>
                                <td style='border:0;' class='ressource'></td>
                            </tr>
                        </table></td>
                    <td><table cellspacing="0" style="border:0;">
                            <tr style="border:0;">
                                <td style='border:0;' class='ressource'></td>
                                <td style='border:0;' class='ressource'></td>
                                <td style='border:0;' class='ressource'></td>
                                <td style='border:0;' class='ressource'></td>
                                <td style='border:0;' class='ressource'></td>
                                <td style='border:0;' class='ressource'></td>
                                <td style='border:0;' class='ressource'></td>
                                <td style='border:0;' class='ressource'></td>
                            </tr>
                        </table></td>
                    <td><table cellspacing="0" style="border:0;">
                            <tr style="border:0;">
                                <td style='border:0;' class='ressource'></td>
                                <td style='border:0;' class='ressource'></td>
                                <td style='border:0;' class='ressource'></td>
                                <td style='border:0;' class='ressource'></td>
                                <td style='border:0;' class='ressource'></td>
                                <td style='border:0;' class='ressource'></td>
                                <td style='border:0;' class='ressource'></td>
                                <td style='border:0;' class='ressource'></td>
                            </tr>
                        </table></td>
                    

                </tr>
                <tr class="basr">
                    <td colspan="26" id="testblocks">
                        <div class="ui-widget-content ui-corner-tr drag">
                            test
                        </div>
                    </td>
                </tr>
            </table>
        </td>
    </tr>
    <tr>
        <th>Ressource 2</th>
    </tr>
    <tr class="basr">
        <th>bac à sable</th>
    </tr>

    </tbody>
</table>
javascript html jquery css jquery-ui
1个回答
1
投票

这里是我建议的一个例子。由于你不能调整Cells的大小,你需要在上面铺设一些东西作为代表。请看下面的代码。

$(function() {
  // There's the gallery and the trash
  var $job = $("#testblocks"),
    $ressource = $(".ressource");

  $("div", $job).draggable({
    cancel: "a.ui-icon",
    revert: "invalid",
    containment: ".containment-wrapper",
    helper: "clone",
    cursor: "move",
    snap: "td",
    scroll: false,
    refreshPositions: true,
    drag: function() {
      var offset = $(this).offset();
      var xPos = offset.left;
      var yPos = offset.top;
      /*$('#posX').text('x: ' + xPos);
      $('#posY').text('y: ' + yPos);*/
    }
  });

  $ressource.droppable({
    hoverClass: 'hovering',
    tolerance: 'pointer',
    accept: "#testblocks > div, .ressource div",
    classes: {
      "ui-droppable-active": "ui-state-highlight"
    },
    drop: function(event, ui) {
      //$(ui.draggable).appendTo($(this));
      var i = $(this).index();
      var p = i - 1;
      var n = i + 1;
      var t = $(this);
      var r = t.parent();
      t
        .add($("td", r).eq(n))
        .add($("td", r).eq(++n))
        .add($("td", r).eq(++n))
        .addClass("marked");
      n++;

      $("<div>", {
        class: "ghost for"
      }).css({
        width: t.width(),
        height: t.height()
      }).appendTo("body").position({
        my: "left top",
        at: "left top",
        of: $(".marked:first", r)
      }).resizable({
        handles: "w",
        resize: function(e, ui) {
          if (ui.position.left < $("td", r).eq(p).position().left) {
            $("td", r).eq(p--).addClass("marked");
          }
          ui.size.width = t.width();
        }
      });

      $("<div>", {
        class: "ghost aft"
      }).css({
        width: t.width(),
        height: t.height()
      }).appendTo("body").position({
        my: "left top",
        at: "left top",
        of: $(".marked:last", r)
      }).resizable({
        handles: "e",
        resize: function(e, ui) {
          var f = ui.position.left;
          if (ui.position.left < $("td", r).eq(n).position().left) {
            $("td", r).eq(n++).addClass("marked");
          }
          ui.size.width = t.width();
        }
      });
    }
  });

  $job.droppable({
    accept: ".ressource div",
    classes: {
      "ui-droppable-active": "custom-state-active"
    },
    drop: function(event, ui) {
      $(ui.draggable).appendTo($job);
    }
  });
});
.drag {
  height: 49px;
  width: 60px;
  text-align: center;
}

td {
  border: 1px solid black;
  /*height:50px;*/
  width: 160px;
}

th {
  border: 1px solid black;
  /*height:50px;*/
  width: 180px;
}

tr {
  border: 1px solid black;
  height: 150px;
}

.basr {
  height: 150px;
}

.masterContent {
  padding: 0;
  margin: 0;
}

.marked {
  background-color: blue;
}

.ghost {
  border: 0;
  background: transparent;
}
<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
<script src="https://code.jquery.com/jquery-1.12.4.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<table cellspacing="0" style="border:1px solid black; text-align:center;">
  <thead>
    <tr style="border:1px solid black;">
      <th style="border:1px solid black;"></th>
      <th style="border:1px solid black;">Lundi</th>
      <th style="border:1px solid black;">Mardi</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th>Ressource 1</th>
      <td colspan="6" rowspan="4" class="masterContent">
        <table cellspacing="0" style="border:0;width:100%;" class="containment-wrapper">
          <tr>
            <td>
              <table cellspacing="0" style="border:0;">
                <tr style="border:0;">
                  <td style='border:0;' class='ressource'></td>
                  <td style='border:0;' class='ressource'></td>
                  <td style='border:0;' class='ressource'></td>
                  <td style='border:0;' class='ressource'></td>
                  <td style='border:0;' class='ressource'></td>
                  <td style='border:0;' class='ressource'></td>
                  <td style='border:0;' class='ressource'></td>
                  <td style='border:0;' class='ressource'></td>
                </tr>
              </table>
              <td>
                <table cellspacing="0" style="border:0;">
                  <tr style="border:0;">
                    <td style='border:0;' class='ressource'></td>
                    <td style='border:0;' class='ressource'></td>
                    <td style='border:0;' class='ressource'></td>
                    <td style='border:0;' class='ressource'></td>
                    <td style='border:0;' class='ressource'></td>
                    <td style='border:0;' class='ressource'></td>
                    <td style='border:0;' class='ressource'></td>
                    <td style='border:0;' class='ressource'></td>
                  </tr>
                </table>
              </td>
              <td>
                <table cellspacing="0" style="border:0;">
                  <tr style="border:0;">
                    <td style='border:0;' class='ressource'></td>
                    <td style='border:0;' class='ressource'></td>
                    <td style='border:0;' class='ressource'></td>
                    <td style='border:0;' class='ressource'></td>
                    <td style='border:0;' class='ressource'></td>
                    <td style='border:0;' class='ressource'></td>
                    <td style='border:0;' class='ressource'></td>
                    <td style='border:0;' class='ressource'></td>
                  </tr>
                </table>
              </td>
              <td>
                <table cellspacing="0" style="border:0;">
                  <tr style="border:0;">
                    <td style='border:0;' class='ressource'></td>
                    <td style='border:0;' class='ressource'></td>
                    <td style='border:0;' class='ressource'></td>
                    <td style='border:0;' class='ressource'></td>
                    <td style='border:0;' class='ressource'></td>
                    <td style='border:0;' class='ressource'></td>
                    <td style='border:0;' class='ressource'></td>
                    <td style='border:0;' class='ressource'></td>
                  </tr>
                </table>
              </td>
              <td>
                <table cellspacing="0" style="border:0;">
                  <tr style="border:0;">
                    <td style='border:0;' class='ressource'></td>
                    <td style='border:0;' class='ressource'></td>
                    <td style='border:0;' class='ressource'></td>
                    <td style='border:0;' class='ressource'></td>
                    <td style='border:0;' class='ressource'></td>
                    <td style='border:0;' class='ressource'></td>
                    <td style='border:0;' class='ressource'></td>
                    <td style='border:0;' class='ressource'></td>
                  </tr>
                </table>
              </td>
              <td>
                <table cellspacing="0" style="border:0;">
                  <tr style="border:0;">
                    <td style='border:0;' class='ressource'></td>
                    <td style='border:0;' class='ressource'></td>
                    <td style='border:0;' class='ressource'></td>
                    <td style='border:0;' class='ressource'></td>
                    <td style='border:0;' class='ressource'></td>
                    <td style='border:0;' class='ressource'></td>
                    <td style='border:0;' class='ressource'></td>
                    <td style='border:0;' class='ressource'></td>
                  </tr>
                </table>
              </td>

          </tr>
          <tr>
            <td>
              <table cellspacing="0" style="border:0;">
                <tr style="border:0;">
                  <td style='border:0;' class='ressource'></td>
                  <td style='border:0;' class='ressource'></td>
                  <td style='border:0;' class='ressource'></td>
                  <td style='border:0;' class='ressource'></td>
                  <td style='border:0;' class='ressource'></td>
                  <td style='border:0;' class='ressource'></td>
                  <td style='border:0;' class='ressource'></td>
                  <td style='border:0;' class='ressource'></td>
                </tr>
              </table>
            </td>
            <td>
              <table cellspacing="0" style="border:0;">
                <tr style="border:0;">
                  <td style='border:0;' class='ressource'></td>
                  <td style='border:0;' class='ressource'></td>
                  <td style='border:0;' class='ressource'></td>
                  <td style='border:0;' class='ressource'></td>
                  <td style='border:0;' class='ressource'></td>
                  <td style='border:0;' class='ressource'></td>
                  <td style='border:0;' class='ressource'></td>
                  <td style='border:0;' class='ressource'></td>
                </tr>
              </table>
            </td>
            <td>
              <table cellspacing="0" style="border:0;">
                <tr style="border:0;">
                  <td style='border:0;' class='ressource'></td>
                  <td style='border:0;' class='ressource'></td>
                  <td style='border:0;' class='ressource'></td>
                  <td style='border:0;' class='ressource'></td>
                  <td style='border:0;' class='ressource'></td>
                  <td style='border:0;' class='ressource'></td>
                  <td style='border:0;' class='ressource'></td>
                  <td style='border:0;' class='ressource'></td>
                </tr>
              </table>
            </td>
            <td>
              <table cellspacing="0" style="border:0;">
                <tr style="border:0;">
                  <td style='border:0;' class='ressource'></td>
                  <td style='border:0;' class='ressource'></td>
                  <td style='border:0;' class='ressource'></td>
                  <td style='border:0;' class='ressource'></td>
                  <td style='border:0;' class='ressource'></td>
                  <td style='border:0;' class='ressource'></td>
                  <td style='border:0;' class='ressource'></td>
                  <td style='border:0;' class='ressource'></td>
                </tr>
              </table>
            </td>
            <td>
              <table cellspacing="0" style="border:0;">
                <tr style="border:0;">
                  <td style='border:0;' class='ressource'></td>
                  <td style='border:0;' class='ressource'></td>
                  <td style='border:0;' class='ressource'></td>
                  <td style='border:0;' class='ressource'></td>
                  <td style='border:0;' class='ressource'></td>
                  <td style='border:0;' class='ressource'></td>
                  <td style='border:0;' class='ressource'></td>
                  <td style='border:0;' class='ressource'></td>
                </tr>
              </table>
            </td>
            <td>
              <table cellspacing="0" style="border:0;">
                <tr style="border:0;">
                  <td style='border:0;' class='ressource'></td>
                  <td style='border:0;' class='ressource'></td>
                  <td style='border:0;' class='ressource'></td>
                  <td style='border:0;' class='ressource'></td>
                  <td style='border:0;' class='ressource'></td>
                  <td style='border:0;' class='ressource'></td>
                  <td style='border:0;' class='ressource'></td>
                  <td style='border:0;' class='ressource'></td>
                </tr>
              </table>
            </td>


          </tr>
          <tr class="basr">
            <td colspan="26" id="testblocks">
              <div class="ui-widget-content ui-corner-tr drag">
                test
              </div>
            </td>
          </tr>
        </table>
        </td>
    </tr>
    <tr>
      <th>Ressource 2</th>
    </tr>
    <tr class="basr">
      <th>bac à sable</th>
    </tr>

  </tbody>
</table>

我们使用一个类来简单地标记Cells或高亮它们。我们还添加了不属于Table的psudeo句柄。当我们调整大小时,我们可以保留大小,但只需看一下定位,以确定我们在一个方向上移动时要标记哪些单元格。

© www.soinside.com 2019 - 2024. All rights reserved.