拖动table标题实现改变td的大小(css+js代码)

实现拖动表格标题来改变表格单元格的大小需要使用HTML、CSS和JavaScript进行组合实现。

HTML代码

首先,我们需要使用HTML创建一个表格,每个单元格都包含一个div元素,用于拖动边界。

<table>
  <thead>
    <tr>
      <th><div class="resize"></div>Header 1</th>
      <th><div class="resize"></div>Header 2</th>
      <th><div class="resize"></div>Header 3</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td><div></div>Content 1</td>
      <td><div></div>Content 2</td>
      <td><div></div>Content 3</td>
    </tr>
  </tbody>
</table>

注意,表头中每个th单元格都包含类名为“resize”的div元素。这将用于用户调整单元格的大小。

CSS代码

然后,我们需要使用CSS为表格和div元素设置样式。

table {
  border-collapse: collapse;
}

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

th {
  background-color: #eee;
  position: relative;
}

.resize {
  position: absolute;
  top: 0;
  right: -5px;
  bottom: 0;
  width: 5px;
  background-color: #ddd;
  cursor: col-resize;
}

这段代码将使表格的边框和标题边框为黑色,并且为表头的背景颜色设置了一种外观。然后,在div的样式中,我们将其定位到单元格的右侧,并设置鼠标样式为“col-resize”,以便用户知道它可以拖动。

JavaScript代码

最后,我们需要使用JavaScript来实现拖动功能。

const tableHeaders = document.querySelectorAll("th");
let currentHeader = null;
let initialX = 0;
let initialWidth = 0;

function onMouseDown(e) {
  currentHeader = e.target.parentElement;
  initialX = e.clientX;
  initialWidth = currentHeader.clientWidth;
  tableHeaders.forEach(header => {
    if (header !== currentHeader) {
      header.style.pointerEvents = "none";
    }
  });
  document.addEventListener("mousemove", onMouseMove);
  document.addEventListener("mouseup", onMouseUp);
}

function onMouseMove(e) {
  const width = initialWidth + e.clientX - initialX;
  currentHeader.style.width = `${width}px`;
}

function onMouseUp() {
  tableHeaders.forEach(header => {
    header.style.pointerEvents = "auto";
  });
  document.removeEventListener("mousemove", onMouseMove);
  document.removeEventListener("mouseup", onMouseUp);
}

tableHeaders.forEach(header => {
  header.addEventListener("mousedown", onMouseDown);
});

这段代码将为每个表头元素(即th元素)注册mousedown事件。当用户点击其中一个表头时,将设置当前表头的变量,以及记录初始鼠标水平位置和当前表头的初始宽度。除了当前表头外,我们还将其他所有表头的指针事件设为“none”,以便防止在用户拖动当前表头时,其他表头干扰。

然后,我们将注册mousemove事件,该事件将在用户拖动表头时调用。我们将计算新宽度,并将其应用于当前表头中。

最后,我们将在mouseup事件上卸载所有事件,并将其他所有表头的指针事件重置为“auto”,以恢复其默认行为。

示例:
1. 代码演示1
2. 代码演示2

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:拖动table标题实现改变td的大小(css+js代码) - Python技术站

(0)
上一篇 2023年6月10日
下一篇 2023年6月10日

相关文章

  • css利用transform skewX制作平行四边形导航菜单

    下面是关于“CSS利用transform skewX制作平行四边形导航菜单”的完整攻略: 什么是transform skewX transform skewX 是 CSS3 中的一个 2D 转换函数,它可以将元素在 x 轴方向上倾斜一定角度。在 transform 中,我们通过设置一个角度值(单位为度)来实现其中的 skewX 转换效果。 制作平行四边形导航…

    css 2023年6月10日
    00
  • vue中引入第三方字体文件的方法示例

    下面是关于Vue中引入第三方字体文件的方法的攻略详解。 1.引入Google Font字体 Google Font是一个在Web中可以免费使用的字体库,可以方便地让我们引入自己想要的各种字体。下面详细介绍如何在Vue中引入Google Font字体。 首先,我们需要在html文件中引入Google Font的链接地址,具体代码如下: <link hre…

    css 2023年6月10日
    00
  • 动易CMS改变行距、字体大小、颜色

    以下是详细讲解“动易CMS改变行距、字体大小、颜色”的完整攻略: 改变行距 改变行距可以使文章排版更加美观和易读。在动易CMS中,可通过以下步骤改变行距: 进入文章的编辑界面,选中需要改变行距的文字。 在工具栏中点击“行间距”按钮,选择所需的行距大小即可。 示例说明: 假设你的文章中有一段需要加大行距的文字,你可以先选中这段文字,然后在工具栏中点击“行间距”…

    css 2023年6月9日
    00
  • CSS3 border-radius圆角的实现方法及用法详解

    CSS3 border-radius圆角的实现方法及用法详解 什么是border-radius? border-radius 是指CSS3中的一个属性,用来设置边框的圆角效果。 border-radius 使用方法 设置圆角的语法如下: border-radius: Xpx [Ypx]; 其中 X 代表水平方向的圆角半径,Y 代表竖直方向的圆角半径。如果 Y…

    css 2023年6月9日
    00
  • Lesson03_01 什么是CSS和CSS的设置方式

    Lesson03_01 什么是CSS和CSS的设置方式 什么是CSS CSS(Cascading Style Sheets) 是一种样式表语言,用于描述网页上的文本、样式、布局等设计元素的外观、样式和排版。利用CSS,作者可以控制一个HTML文件的样式和外观,而无需修改HTML元素。 CSS主要作用是美化网页,为网页添加更多的样式,例如字体、字号、颜色、背景…

    css 2023年6月9日
    00
  • 如何使用css绘制钻石的方法

    使用 CSS 绘制钻石的方法主要是通过制定钻石的尺寸、颜色和边框样式等属性,并设置旋转角度来实现。以下是如何使用 CSS 绘制钻石的完整攻略: 钻石形状的设置 使用 CSS 的伪元素 ::before 和 ::after 来绘制钻石的形状。具体可以按照以下步骤来实现: 首先,需要设置钻石的尺寸和位置,可以使用 width 和 height 属性来设置钻石的大…

    css 2023年6月9日
    00
  • jQuery实现天猫商品放大镜效果

    一、准备工作 引入jQuery库和相关CSS样式文件 在head标签中引入jQuery库jquery.min.js和放大镜样式文件zoom.css。 <head> <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.min.js">&…

    css 2023年6月11日
    00
  • html5+css3之CSS中的布局与Header的实现

    下面是“HTML5+CSS3之CSS中的布局与Header的实现”攻略: 一、CSS布局基础 1.1 盒模型 CSS盒模型是指在HTML文档中,每个元素形成一个带边框的盒子。盒子的大小、位置、边界都能被 CSS 所控制。 盒模型包括四个部分: 内容(content): HTML元素内容所包含的数据 内边距(Padding): 盒子内边界和内容之间的距离 边框…

    css 2023年6月9日
    00
合作推广
合作推广
分享本页
返回顶部