js 鼠标拖动自由调节表格的列宽

鼠标拖动调整列宽的js程序,大体的要求是控制table的总宽度不变,拖动表格列的时候只改变当前列和它之后相邻列的宽度,其他的表格列不受影响。

实现思路:每一列中用一个span来响应拖动事件,在onmousemove事件中计算当前列和其后相邻列的宽度变化并赋予每列新的宽度值。

 

代码如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<style type="text/css">
table{
	border-left:1px solid black;
	width:100%;
	border-top:1px solid black
}

td{
	border-bottom:1px solid black;
	border-right:1px solid black;
	white-space:nowrap;		/*不换行*/
	overflow:hidden;
	text-overflow:ellipsis;	/*文本超出部分用"..."代替*/
}

.resizeDivClass{
	PADDING-RIGHT: 0px;
	MARGIN-RIGHT: 0px; 
	float:right;
	cursor:e-resize;
	HEIGHT: 100%; 
	width:2px;
}
</style>

<script language="javascript" type="text/javascript">

var dragobj=null;    //保存用户选择的"span"

//handle onmousedown event 
function MouseDow
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 以下是一个示例代码,实现了Datatables表格的固定高度和拖动的功能: HTML: ```html <table id="example" class="display" style="width:100%"> <thead> <tr> <th>Column 1</th> <th>Column 2</th> <th>Column 3</th> <th>Column 4</th> </tr> </thead> <tbody> <tr> <td>Row 1 Data 1</td> <td>Row 1 Data 2</td> <td>Row 1 Data 3</td> <td>Row 1 Data 4</td> </tr> <tr> <td>Row 2 Data 1</td> <td>Row 2 Data 2</td> <td>Row 2 Data 3</td> <td>Row 2 Data 4</td> </tr> <tr> <td>Row 3 Data 1</td> <td>Row 3 Data 2</td> <td>Row 3 Data 3</td> <td>Row 3 Data 4</td> </tr> </tbody> </table> ``` JavaScript: ```javascript $(document).ready(function() { var table = $('#example').DataTable({ scrollY: 'calc(100vh - 200px)', //设置表格高度 scrollCollapse: true, paging: false, columnDefs: [ { width: "20%", targets: 0 }, //设置每的初始宽度 { width: "20%", targets: 1 }, { width: "30%", targets: 2 }, { width: "30%", targets: 3 }, { resizable: false, targets: [0,1] } //禁用第一和第二拖动功能 ], //启用拖动功能 initComplete: function() { this.api().columns().every(function() { var column = this; var colHeader = $(column.header()); colHeader.append('<div class="resizer"></div>'); colHeader.on('mousedown', '.resizer', function(event) { event.preventDefault(); var startX = event.pageX; var tableWidth = $('#example').width(); $(document).on('mousemove', function(event) { var change = event.pageX - startX; var newWidth = column.width() + change; if (newWidth > 50 && newWidth < (tableWidth-100)) { column.width(newWidth); } }); }); }); $(document).on('mouseup', function(event) { $(document).unbind('mousemove'); }); } }); }); ``` CSS: ```css table.dataTable thead .resizer { width: 5px; height: 100%; position: absolute; top: 0; right: 0; cursor: col-resize; z-index: 100; } table.dataTable thead .resizer:hover { background-color: lightgray; } ``` 注意,为了实现拖动的功能,我们给表头的每一添加了一个可拖动的元素。在CSS中,我们定义了这个元素的样式和行为。在JavaScript中,我们使用了jQuery的事件处理机制来绑定拖动的逻辑。具体来说,我们在initComplete回调函数中,使用this.api().columns().every()方法来遍历每一,并给每一的表头添加了一个可拖动的元素。在这个元素上,我们绑定了mousedown事件,用来开始拖动操作。在这个事件回调函数中,我们记录下了当前鼠标的位置,并在document上绑定mousemove事件,来实时更新。在mousemove事件回调函数中,我们计算鼠标在x轴方向上的位移,然后将这个位移加到当前上,以实时更新。注意,我们还加了一些限制条件,来避免过小或过大的情况。最后,在mouseup事件回调函数中,我们解除了document上的mousemove事件的绑定,以结束拖动操作。 ### 回答2: 以下是设置datatables表格固定高度和拖动的完整代码: HTML部分: ```html <!DOCTYPE html> <html> <head> <link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/1.10.25/css/jquery.dataTables.css"> <style> #table-container { height: 300px; /* 设置表格的固定高度 */ overflow-y: scroll; /* 设置垂直滚动条 */ } </style> </head> <body> <div id="table-container"> <table id="myTable" class="display"> <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> </div> <script src="https://code.jquery.com/jquery-3.6.0.min.js" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous"></script> <script src="https://cdn.datatables.net/1.10.25/js/jquery.dataTables.js"></script> <script> $(document).ready(function() { $('#myTable').DataTable({ // 添加其他解决方案选项 }); }); </script> </body> </html> ``` 上述代码中,我们添加了一个外部的CSS样式部分,通过设置`#table-container`的高度为300像素,并设置`overflow-y: scroll;`来创建垂直滚动条。这样,表格将在该容器内固定高度显示,并提供垂直滚动条以滚动查看更多内容。 在JavaScript部分,我们使用了`datatable()`函数来初始化datatables表格,并通过为其增加其他解决方案选项来实现其他功能,如拖动等。 ### 回答3: 下面是一个使用datatables来实现表格固定高度和拖动的完整代码示例: 在HTML文件中,需要引入datatables库和相关的CSS文件和JavaScript文件: ```html <!DOCTYPE html> <html> <head> <title>Datatables固定高度和拖动示例</title> <link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/1.10.25/css/jquery.dataTables.min.css"> <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script> <script src="https://cdn.datatables.net/1.10.25/js/jquery.dataTables.min.js"></script> </head> <body> <table id="myTable" class="display" style="width:100%"></table> </body> </html> ``` 在JavaScript文件中,初始化和配置datatables表格,并设置固定高度和拖动: ```javascript $(document).ready(function() { // 初始化表格 $('#myTable').DataTable({ scrollY: '300px', // 设置固定高度 scrollCollapse: true, // 当表格内容不足高度时,是否自动收缩高度 columnDefs: [ { resizable: true, className: 'dt-center' } // 设置所有拖动调整宽度,并居中显示 ], ajax: { url: 'your_api_endpoint', // 填写获取表格数据的API地址 dataSrc: 'data' // 数据源字段名,例如{ "data": [...] } }, columns: [ { data: 'column1', title: '1' }, // 1数据来源和标题 { data: 'column2', title: '2' }, // 2数据来源和标题 // 可以添加更多... ] }); }); ``` 上述代码通过`scrollY`属性实现了固定高度,`scrollCollapse`属性用于根据表格内容自动收缩高度。通过`columnDefs`配置设置所有拖动调整宽度,并使用`className`来添加样式,居中显示内容。通过`ajax`属性配置获取表格数据的API地址,并通过`dataSrc`指定数据源字段名。通过`columns`属性配置表格的各,包括数据来源和标题。 以上是一个简单的使用datatables实现表格固定高度和拖动的完整代码示例,你可以根据自己的实际需求进行进一步的配置和定制。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值