【问题标题】:How to color td when i click and swipe?单击和滑动时如何为 td 着色?
【发布时间】:2020-05-06 16:12:46
【问题描述】:

我有一个测试div,当div 拖放到选项卡中时我可以将它拖到表格中,我将目标<td> 涂成蓝色。 现在,当我单击、按住并滑动到蓝色 <td> 的右侧或左侧时,我想让所有其他 td beeing 着色,就像调整大小一样。

所以我的问题是: 如何“调整”我的蓝色<td>? “调整大小”不是一个好词,因为我想模拟它为其他人着色<td>,如果您有线索/方法可以通过单击并向右或向左滑动来调整大小,我将不胜感激。

我尝试使用 jquery ui resizable 将div 直接放在td 中,但我无法用它制作我想要的东西(我想?)

请看一下代码 sn-p,很难解释我想从 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>

【问题讨论】:

  • 那么你的代码有什么问题?我们如何复制或测试它?在任何特定的浏览器上都会发生这种情况吗?
  • 您还缺少&lt;thead&gt; 元素。
  • 嗨,我不知道如何“调整”我的蓝色 &lt;td&gt;。调整大小不是一个好词,因为我想模拟它在点击时为其他人着色&lt;td&gt;,然后像调整大小一样向右或向左滑动,如果你有线索/方法可以跟随,我会很感激的。是的,你是真的,我忘记了&lt;thead&gt; ...代码 sn-p 用于测试我实际所做的工作。
  • 听起来像是在它被放下后,你想要调整一个“ghost”元素的大小,然后“填充”它下面的单元格。
  • 非常感谢您的回复。不是鬼,我丢弃的元素是一个日历事件,我想调整这个事件的大小。要调整它的大小,当我单击并按住彩色单元格(&lt;td&gt;)的右边框或左边框时,我需要用相同的颜色为下一个或上一个&lt;td&gt; 着色(如果可能的话)调整大小光标...

标签: javascript html jquery css jquery-ui


【解决方案1】:

这是我建议的一个例子。由于您无法调整单元格的大小,因此您需要放置一些东西来充当代表。考虑以下代码。

$(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>

我们使用一个类来简单地标记单元格或突出显示它们。我们还添加了不属于表格的伪句柄。当我们调整大小时,我们可以保留大小,但只需查看位置以确定当我们朝一个方向移动时要标记哪些单元格。

【讨论】:

  • 嗨,Twisty,这真的很酷,并且接近我正在寻找的东西,我也会尝试这样做以减小尺寸(缩小尺寸?)。我现在只有一个大问题,我不知道为什么,当我在左侧调整大小并继续在右侧的同一块中调整大小时,我需要通过悬停父 td 来扩展我的“事件”
  • 我无法正确修改这部分代码:if (ui.position.left &lt; $("td", r).eq(p).position().left) { $("td", r).eq(p--).addClass("marked"); } 我必须能够使用“containment”类将我的事件扩展到大td 的左边框之外...... @Twisty你能帮帮我吗?
  • 你能帮帮我吗?
  • @Fangster 根据您的 HTML 结构,您所问的问题非常困难。现在,如果您需要定位下一个单元格或上一个单元格,使用同一张表很容易做到这一点。在另一个表格中选择单元格变得更加困难。
  • 好的,我会尝试更改 html 结构并保持相同的“视图”非常感谢您的回复!
猜你喜欢
  • 2014-02-28
  • 2016-08-22
  • 2011-07-01
  • 2016-04-03
  • 1970-01-01
  • 2021-03-16
  • 1970-01-01
  • 2011-07-13
  • 2015-05-04
相关资源
最近更新 更多