JavaScript:如何在表中设置拖放步骤

前端之家收集整理的这篇文章主要介绍了JavaScript:如何在表中设置拖放步骤前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有这样的代码
<div class="table-area">
  <table>
    <thead>
      <tr>
      <th>someDate</th>
      <th>1</th>
      <th>2</th>
      <th>3</th>
      </tr>
    </thead>

    <tbody>
      <tr>
        <td>someDateVal1</td>
        <td class="data-cell"></td>
        <td class="data-cell"></td>
        <td class="data-cell"></td>
      </tr>
      <tr>
        <td>someDateVal2</td>
        <td class="data-cell"></td>
        <td class="data-cell"></td>
        <td class="data-cell"></td>
      </tr>
    </tbody>
  </table>

  <div class="table-area-selected"
    draggable="true"></div>
</div>

和js:

$(function() {

  var selected = $('.table-area-selected');

  var cell = $('table').find('.data-cell');


  selected.css('width',$(cell[0]).outerWidth() * 2);
  selected.css('height',$(cell[0]).outerHeight());


  selected.css('top',$(cell[0]).position().top);
  selected.css('left',$(cell[0]).position().left);

  $('.table-area-selected').on('dragstart',function(event) {
    console.log('drag',event);
  });

  $('table').on('drop',function(event) {
    var selected = $('.table-area-selected');

    var cell = event.target;

    console.log('drop',event);


    selected.css('width',$(cell).outerWidth() * 2);
    selected.css('height',$(cell).outerHeight());


    selected.css('top',$(cell).position().top);
    selected.css('left',$(cell).position().left);
  });

  $('table').on('dragover',function(event) {
    event.preventDefault();
  });


});

https://plnkr.co/edit/NpRHbgHnUgGfgAOJnSTw?p=preview

是否可以像其他计划插件一样拖动此项目?像这样:https://dhtmlx.com/docs/products/demoApps/room-reservation-html5-js-php/

因为现在我的矩形是免费的.我需要在表格上设置它的运动:像这样:
https://www.screencast.com/t/EXKQwTwTwkb
而不是这个:
https://www.screencast.com/t/g6jbP4s9hBX2

有可能吗?

解决方法

我个人不会在这种情况下使用HTML 5拖放,我会选择鼠标事件.

请注意,我写的是2列跨度;如果你想要它更灵活,你需要调整它.

$(function() {

  var isDragging = false;

  var $selected = $('.table-area-selected');

  var $cells = $('table').find('.data-cell');
  var colSpan = 2;
  var $currentCell = $($cells[0]);
  var cellWidth = $currentCell.outerWidth();

  $selected.css('width',cellWidth * colSpan);
  $selected.css('height',$currentCell.outerHeight() - 2); // fiddle factor
  $selected.css('top',$currentCell.position().top);
  $selected.css('left',$currentCell.position().left);

  // drag start
  $selected.mousedown(dragStart);

  // drag end
  $(window).mouseup(dragEnd);

  // drag over cells
  $cells.mouseenter(draggingIntoNewCell);
  $selected.mousemove(draggingInSelectedCell);


  function dragStart() {
    isDragging = true;
  }

  function dragEnd() {
    isDragging = false;
  }

  function draggingIntoNewCell() {
    $currentCell = $(this);
    reposition($currentCell);
  }

  // find if we've moved into the next column under this selection
  function draggingInSelectedCell(e) {

    if (isDragging) {

      // find relative position within selection div
      var relativeXPosition = (e.pageX - $(this).offset().left);

      if (relativeXPosition > cellWidth) { // moved into next column
        $currentCell = $currentCell.next();
        reposition($currentCell);
      }
    }
  }

  function reposition($cell) {

    // only reposition if not the last cell in the table (otherwise can't span 2 cols)    
    if (isDragging && $cell.next().hasClass('data-cell')) {
      $selected.css('top',$cell.position().top);
      $selected.css('left',$cell.position().left);
    }
  }

});
table th,table td {
  padding: 8px 40px;
  border: 1px solid #cecece;
  position: relative;
  -moz-user-select: none;
  -webkit-user-select: none;
  -ms-user-select: none;
}

.table-area-selected {
  position: absolute;
  background: green;
  border: 1px solid blue;
  cursor: pointer;
}
<!DOCTYPE html>
<html>

<head>
  <script data-require="jquery@*" data-semver="3.1.1" src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
</head>

<body>
  <h1>Hello Plunker!</h1>

  <div class="table-area">
    <table>
      <thead>
        <tr>
          <th>someDate</th>
          <th>1</th>
          <th>2</th>
          <th>3</th>
          <th>4</th>
        </tr>
      </thead>

      <tbody>
        <tr>
          <td>someDateVal1</td>
          <td class="data-cell"></td>
          <td class="data-cell"></td>
          <td class="data-cell"></td>
          <td class="data-cell"></td>
        </tr>
        <tr>
          <td>someDateVal2</td>
          <td class="data-cell"></td>
          <td class="data-cell"></td>
          <td class="data-cell"></td>
          <td class="data-cell"></td>
        </tr>
      </tbody>
    </table>

    <div class="table-area-selected"></div>
  </div>
</body>

</html>

演示:http://plnkr.co/edit/RIhDiu9bI00SJysKvMuu?p=preview

原文链接:https://www.f2er.com/js/158144.html

猜你在找的JavaScript相关文章