以下是一个简单的实现:

  1. HTML部分,使用table标签创建表格,并设置表头:
<table>
  <thead>
    <tr>
      <th>表头1</th>
      <th>表头2</th>
      <th>表头3</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>内容1</td>
      <td>内容2</td>
      <td>内容3</td>
    </tr>
    <tr>
      <td>内容4</td>
      <td>内容5</td>
      <td>内容6</td>
    </tr>
  </tbody>
</table>
  1. CSS部分,使用CSS样式设置表格样式及拖拽时的样式:
table {
  border-collapse: collapse;
  width: 100%;
}

th, td {
  border: 1px solid black;
  padding: 8px;
}

th.dragging {
  background-color: #ccc;
}

th.drop {
  background-color: #aaa;
}
  1. JavaScript部分,使用原生JavaScript实现拖拽功能:
// 获取所有表头
const headers = document.querySelectorAll('th');

// 遍历表头,为每个表头添加拖拽事件
headers.forEach(header => {
  header.draggable = true;

  // 当拖拽开始时,添加dragging类,并设置数据
  header.addEventListener('dragstart', e => {
    e.target.classList.add('dragging');
    e.dataTransfer.setData('text/plain', e.target.innerHTML);
  });

  // 当拖拽结束时,移除dragging类
  header.addEventListener('dragend', e => {
    e.target.classList.remove('dragging');
  });

  // 当拖拽进入其他表头时,添加drop类
  header.addEventListener('dragenter', e => {
    e.target.classList.add('drop');
  });

  // 当拖拽离开其他表头时,移除drop类
  header.addEventListener('dragleave', e => {
    e.target.classList.remove('drop');
  });

  // 当拖拽在其他表头上松开时,交换表头的位置
  header.addEventListener('drop', e => {
    e.preventDefault();
    const data = e.dataTransfer.getData('text/plain');
    const target = e.target.innerHTML;
    e.target.innerHTML = data;
    e.target.classList.remove('drop');

    headers.forEach(header => {
      if (header.innerHTML === data) {
        header.innerHTML = target;
      }
    });
  });
});

通过以上代码,就可以实现自定义表头的拖拽上下移动功能


原文地址: https://www.cveoy.top/t/topic/eQ7A 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录