HTML 锁定表格首行首列、拖拽表格列宽
摘自:http://s.yanghao.org/program/viewdetail.php?i=61717
因为与自己的实际情况有些不同,简单的改造了下。。。如果有版权问题,请留言。。。
锁定Table表格首行首列(可自己指定)
拖拽Table标题列宽
扩展Jquery插件
![](/assets/blank.gif)
![](/assets/blank.gif)
// JavaScript Document//要操作的表格ID var TableID='';(function(){$.FixTable=function(options){//设置接收参数及默认值var defaults ={TableID:'',//要设置的TableIDLockRowCount:1,//要锁定的行数LockColumnCount:0,//要锁定的列数IsDragTitleWidth:false//是否拖拽标题列宽 };//转换接收来的参数值 $.extend(defaults, options);TableID=defaults.TableID;//得到表格本身var $table=$("#"+defaults.TableID);if($table.length==0){return;}//以下设置拖拽效果//以下设置Table冻结行列//滚动条宽度var scrW = 16;$table.show();//得到表格实际大小var tableW = $table.outerWidth(true);var tableH = $table.outerHeight(true);//如果存在这个Table 框架(上次动态查询产生)if($("#tb_fix_Frame").length!=0){$("#tb_fix_Frame").remove();}//允许显示区域大小(外层Div的大小) $table.hide();var outDivW = $table.parent().outerWidth(true);var outDivH = $table.parent().outerHeight(true);$table.show();//拿到表格的HTML代码(必须返回到父类才能得到全部HTML)var tableHtml = $table.parent().html();//判断是否需要固定行列头if(tableW<=outDivW && tableH<=outDivH){return;}//判断需要固定行/列/行列var fixType = 4; //全固定if(defaults.LockRowCount<0 && defaults.LockColumnCount<0){return;}else if (defaults.LockRowCount>0 && defaults.LockColumnCount<=0){fixType = 1; //行固定 }else if(defaults.LockRowCount<=0 && defaults.LockColumnCount>0){fixType = 2; //列固定 }//固定单元格的位置(固定的宽度高度)var fixW = 0;var fixH = 0;//得到表格的偏移量 (元素在父元素内的坐标)var tableOffset = $table.offset();//每个块中Div统一名称var pid = 'fixbox_'+$table.attr('id');var div1, div2, div3, div4;if(fixType==4){ //行头列头都需固定//取出指定行列单元格在Table表内的偏移量var tdOffset = $table.find('tr').eq(defaults.LockRowCount).find('td').eq(defaults.LockColumnCount).offset();//相减得到要锁定的高度宽度像素fixW = tdOffset.left - tableOffset.left;fixH = tdOffset.top - tableOffset.top;var tmp='<table id="tb_fix_Frame" style="background: #ededed;" border="0" cellspacing="0" cellpadding="0">';tmp+='<tr>';tmp+='<td>';tmp+='<div id="'+pid+'1"></div>';tmp+='</td>';tmp+='<td style="border-bottom: 1px solid '+splitColor+';">';tmp+='<div id="'+pid+'2"></div>';tmp+='</td>';tmp+='</tr>';tmp+='<tr>';tmp+='<td valign="top">';tmp+='<div id="'+pid+'3"></div>';tmp+='</td>';tmp+='<td>';tmp+='<div id="'+pid+'4"></div>';tmp+='</td>';tmp+='</tr>';tmp+='</table>';$table.before(tmp);$('div[id^='+pid+']').each(function(){$(this).css({background: 'white',overflow: 'hidden',margin: '0 0 0 0',padding: '0 0 0 0',border: '0'});});div1 = $('#'+pid+'1');div2 = $('#'+pid+'2');div3 = $('#'+pid+'3');div4 = $('#'+pid+'4');//左上角方块 div1.html(tableHtml).css({width: fixW, height: fixH});div1.find('table:first').attr('id',$table.attr('id')+1);//右上方块div2.html(tableHtml).css({width: outDivW-fixW-scrW, height: fixH});if(outDivH>=tableH)//如果外层Div高度大于或等于表格高度,则不会出现上下滚动条,右上方块宽度不用减去滚动条 {div2.html(tableHtml).css({width: outDivW-fixW, height: fixH});}//移动Div内的Tablediv2.find('table:first').css({position: 'relative',left: -fixW}).attr('id',$table.attr('id')+2);//左下方块div3.html(tableHtml).css({width: fixW, height: outDivH-fixH-scrW});div3.find('table:first').css({position: 'relative',top: -fixH}).attr('id',$table.attr('id')+3);//主方块 div4.append(tableHtml).css({width: outDivW-fixW, height: outDivH-fixH+1,overflow:'auto'});div4.find('table:first').css({position: 'relative',top: -fixH,left:-fixW}).attr('id',$table.attr('id')+4);//设置主Div块与Div2块滚动条左右滚动同步//设置主Div块与Div3块滚动条上下滚动同步div4.scroll(function(){div2.scrollLeft($(this).scrollLeft());div3.scrollTop($(this).scrollTop());});}else if(fixType==1){ //只需固定行头//锁定行号大于等于Table的行数、则锁定高度像素为Table高度if(defaults.LockRowCount>=$table.find('tr').length){fixH=$table.height();}else{//得到行的偏移量var tdOffset= $table.find('tr').eq(defaults.LockRowCount).offset();//相减得到要锁定的高度像素fixH = tdOffset.top - tableOffset.top;}//取消Table外层的Div,为下次动态锁定做准备//$table.unwrap();var tmp='<table id="tb_fix_Frame" style="background: #ededed;" border="0" cellspacing="0" cellpadding="0">';tmp+='<tr>';tmp+='<td>';tmp+='<div id="'+pid+'1"></div>';tmp+='</td>'tmp+='</tr>';tmp+='<tr>';tmp+='<td>';tmp+='<div id="'+pid+'2"></div>';tmp+='</td>';tmp+='</tr>';tmp+='</table>';$table.before(tmp);$('div[id^='+pid+']').each(function(){$(this).css({background: 'white',overflow: 'hidden',margin: '0 0 0 0',padding: '0 0 0 0',border: '0'});});div1 = $('#'+pid+'1');div2 = $('#'+pid+'2');//上方方块div1.html(tableHtml).css({width: outDivW-scrW, height: fixH});if(outDivH>=tableH)//如果外层Div高度大于或等于表格高度,则不会出现上下滚动条,上方块宽度不用减去滚动条 {div1.html(tableHtml).css({width: outDivW, height: fixH});}div1.find('table:first').attr('id',$table.attr('id')+1);//主方块 div2.append(tableHtml).css({width: outDivW+1, height: outDivH-fixH,overflow: 'auto'});div2.find('table:first').css({position: 'relative',top: -fixH,left:0}).attr('id',$table.attr('id')+2);//设置上下Div块滚动条左右同步div2.scroll(function(){div1.scrollLeft($(this).scrollLeft());}); }else if(fixType==2){ //只需固定列头//锁定列号大于等于Table的列数、则锁定宽度像素为Table宽度if(defaults.LockColumnCount>=$table.find('tr').first().find('td').length){fixW=$table.width();} else{//得到TD在表格内的偏移量var tdOffset = $table.find('tr').first().find('td').eq(defaults.LockColumnCount).offset();//相减得到要锁定的宽度像素fixW = tdOffset.left - tableOffset.left;}//取消Table外层的Div,为下次动态锁定做准备//$table.unwrap();var tmp='<table id="tb_fix_Frame" style="background: #ededed;" border="0" cellspacing="0" cellpadding="0">';tmp+='<tr>';tmp+='<td valign="top">';tmp+='<div id="'+pid+'1"></div>';tmp+='</td>';tmp+='<td>';tmp+='<div id="'+pid+'2"></div>';tmp+='</td>';tmp+='</tr>';tmp+='</table>';$table.before(tmp);$('div[id^='+pid+']').each(function(){$(this).css({background: 'white',overflow: 'hidden',margin: '0 0 0 0',padding: '0 0 0 0',border: '0'});});div1 = $('#'+pid+'1');div2 = $('#'+pid+'2');//左方方块div1.html(tableHtml).css({width: fixW, height: outDivH-scrW});div1.find('table:first').attr('id',$table.attr('id')+1);//主方块 div2.append(tableHtml).css({width: outDivW-fixW, height: outDivH+1,overflow: 'auto'});div2.find('table:first').css({position: 'relative',top: 0,left:-fixW}).attr('id',$table.attr('id')+2);//设置左右Div块滚动条上下滚动同步div2.scroll(function(){div1.scrollTop($(this).scrollTop());}); }}$.DragTitleWidth=function(options){var defaults={TableID:''//要设置的TableID }//转换接收来的参数值 $.extend(defaults, options);//得到表格本身var $table=$("#"+defaults.TableID);if($table.length==0){return;}TableID=defaults.TableID;//在每个TD内容内添加Span层var dragSpan='<div class="resizeDivClass" οnmοusedοwn="MouseDownToResize(this);" οnmοusemοve="MouseMoveToResize(this);" οnmοuseup="MouseUpToResize(this);">|</div>';var $td=$table.find('tr').first().find('td');$td.each(function(index,object){$(object).html($(object).html()+dragSpan);});} })(jQuery);function MouseDownToResize(obj) {var theObjTable = document.getElementById(TableID);setTableLayoutToFixed();obj.mouseDownX = event.clientX;obj.pareneTdW = obj.parentElement.offsetWidth;obj.pareneTableW = theObjTable.offsetWidth;obj.setCapture(); } function MouseMoveToResize(obj) {if (!obj.mouseDownX) return false;var newWidth = obj.pareneTdW * 1 + event.clientX * 1 - obj.mouseDownX;if (newWidth > 10) {var theObjTable = document.getElementById(TableID);obj.parentElement.style.width = newWidth;theObjTable.style.width = obj.pareneTdW * 1 + event.clientX * 1 - obj.mouseDownX;} } function MouseUpToResize(obj) {obj.releaseCapture();obj.mouseDownX = 0; } function setTableLayoutToFixed() {var theObjTable = document.getElementById(TableID); if (theObjTable.style.tableLayout == 'fixed') return;var headerTr = theObjTable.rows[0];for (var i = 0; i < headerTr.cells.length; i++) {headerTr.cells[i].styleOffsetWidth = headerTr.cells[i].offsetWidth;headerTr.cells[i].style.width = headerTr.cells[i].styleOffsetWidth;}theObjTable.style.tableLayout = 'fixed';var $table=$("#"+TableID);if($table.css('position')=='fixed') return;var $td=$table.find('tr').first().find('td');for(var i=0;i<$td.length;i++){//$td.css({'width':$td.outerWidth(true)}); } }
CSS 样式
![](/assets/blank.gif)
![](/assets/blank.gif)
.resizeDivClass {text-align: right;width: 2px;height: 100%;margin-left:auto;margin-right:0px;border: 0px;float: right;cursor: e-resize; }
事例
![](/assets/blank.gif)
![](/assets/blank.gif)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>无标题文档</title> <script type="text/javascript" src="../Scripts/jquery-1.4.2.js"></script> <link rel="stylesheet" type="text/css" href="../Scripts/FixDragTable/autoTable.css"/> <script type="text/javascript" src="../Scripts/FixDragTable/jquery.FixTable.js"></script> <script type="text/javascript" defer="defer">$(document).ready(function(){//调用拖拽 $.DragTitleWidth({TableID:'tdDrag'})//锁定首行首列 $.FixTable({TableID:'tdTest'});})function Add(){var html='';for(var i=0;i<50;i++){html+='<tr>';html+=' <td>我是内容</td>';html+=' <td>我是内容</td>';html+=' <td>我是内容</td>';html+=' <td>我是内容</td>';html+=' <td>我是内容</td>';html+='</tr>';}$(html).appendTo("#tdTest");$.FixTable({TableID:'tdTest'});} </script> <style type="text/css"> .myTable td {border:#00F solid 1px; } </style> </head><body> <input type="button" onclick="Add()" value="点击添加" /> <!--Div溢出部分设置为隐藏--> <div id="divA" style="width:300px; height:300px; border:#F00 solid 1px; overflow:hidden"><table class="myTable" id="tdTest" style="border-collapse:collapse; width:600px;" cellspacing="0"><tr bgcolor="#99FFFF"><td>列A</td><td>列B</td><td>列C</td><td>列D</td><td>列E</td></tr><tr><td>我是内容</td><td>我是内容</td><td>我是内容</td><td>我是内容</td><td>我是内容</td></tr><tr><td>我是内容</td><td>我是内容</td><td>我是内容</td><td>我是内容</td><td>我是内容</td></tr><tr><td>我是内容</td><td>我是内容</td><td>我是内容</td><td>我是内容</td><td>我是内容</td></tr><tr><td>我是内容</td><td>我是内容</td><td>我是内容</td><td>我是内容</td><td>我是内容</td></tr><tr><td>我是内容</td><td>我是内容</td><td>我是内容</td><td>我是内容</td><td>我是内容</td></tr><tr><td>我是内容</td><td>我是内容</td><td>我是内容</td><td>我是内容</td><td>我是内容</td></tr><tr><td>我是内容</td><td>我是内容</td><td>我是内容</td><td>我是内容</td><td>我是内容</td></tr><tr><td>我是内容</td><td>我是内容</td><td>我是内容</td><td>我是内容</td><td>我是内容</td></tr><tr><td>我是内容</td><td>我是内容</td><td>我是内容</td><td>我是内容</td><td>我是内容</td></tr><tr><td>我是内容</td><td>我是内容</td><td>我是内容</td><td>我是内容</td><td>我是内容</td></tr><tr><td>我是内容</td><td>我是内容</td><td>我是内容</td><td>我是内容</td><td>我是内容</td></tr><tr><td>我是内容</td><td>我是内容</td><td>我是内容</td><td>我是内容</td><td>我是内容</td></tr><tr><td>我是内容</td><td>我是内容</td><td>我是内容</td><td>我是内容</td><td>我是内容</td></tr><tr><td>我是内容</td><td>我是内容</td><td>我是内容</td><td>我是内容</td><td>我是内容</td></tr></table> </div><table class="myTable" id="tdDrag" style="border-collapse:collapse; width:600px;" cellspacing="0"><tr bgcolor="#99FFFF"><td>列A</td><td>列B</td><td>列C</td><td>列D</td><td>列E</td></tr><tr><td>我是内容</td><td>我是内容</td><td>我是内容</td><td>我是内容</td><td>我是内容</td></tr><tr><td>我是内容</td><td>我是内容</td><td>我是内容</td><td>我是内容</td><td>我是内容</td></tr><tr><td>我是内容</td><td>我是内容</td><td>我是内容</td><td>我是内容</td><td>我是内容</td></tr><tr><td>我是内容</td><td>我是内容</td><td>我是内容</td><td>我是内容</td><td>我是内容</td></tr><tr><td>我是内容</td><td>我是内容</td><td>我是内容</td><td>我是内容</td><td>我是内容</td></tr><tr><td>我是内容</td><td>我是内容</td><td>我是内容</td><td>我是内容</td><td>我是内容</td></tr><tr><td>我是内容</td><td>我是内容</td><td>我是内容</td><td>我是内容</td><td>我是内容</td></tr><tr><td>我是内容</td><td>我是内容</td><td>我是内容</td><td>我是内容</td><td>我是内容</td></tr><tr><td>我是内容</td><td>我是内容</td><td>我是内容</td><td>我是内容</td><td>我是内容</td></tr><tr><td>我是内容</td><td>我是内容</td><td>我是内容</td><td>我是内容</td><td>我是内容</td></tr><tr><td>我是内容</td><td>我是内容</td><td>我是内容</td><td>我是内容</td><td>我是内容</td></tr><tr><td>我是内容</td><td>我是内容</td><td>我是内容</td><td>我是内容</td><td>我是内容</td></tr><tr><td>我是内容</td><td>我是内容</td><td>我是内容</td><td>我是内容</td><td>我是内容</td></tr><tr><td>我是内容</td><td>我是内容</td><td>我是内容</td><td>我是内容</td><td>我是内容</td></tr></table> </body> </html>
转载于:https://www.cnblogs.com/only-copy/articles/2518296.html
HTML 锁定表格首行首列、拖拽表格列宽相关推荐
- Element UI表格拖拽(vue中) —— 行拖拽、列拖拽
目录 安装依赖 vuedraggable 实现拖拽的要点 行拖拽要点 列拖拽要点 完整范例代码 安装依赖 vuedraggable 安装 vuedraggable 的同时,会自动安装 sortabl ...
- html表格列拖拽,table表格列顺序拖拽和列宽度拖拽
目前项目要求对表格可进行宽度拖拽和排序拖拽.用的第三方库库ant-desigin-vue. 对于列宽度拖拽 在ant-desigin-vue的table示例中有对应的案例,但是直接复制代码,会报错.最 ...
- 前端elementui表格拖拽sortablejs避坑,vue2前端表格列拖拽解决方案
sortablejs sortablejs是目前比较多人用的elementui表格拖拽的插件,但是这个插件的bug很不友好:主要bug是拖拽列后不能调整列的宽,处理这个bug只能是不让用户调整列宽. ...
- 【Axure视频教程】固定中继器表格首行首列
今天教大家在Axure里如何制作固定中继器表格首行首列的原型模板,包括固定首行(标题行)和首列.固定首行(标题行)和前两列两个案例,因为是用中继器表格制作的,所以使用也非常方便,我们只需要在中继器表格 ...
- iview table 自定义列_案例 | iview中Table:拖拽适配列、自定义固定列、合并行
文 / 景朝霞 来源公号 / 朝霞的光影笔记 ID / zhaoxiajingjing ❥❥❥❥点个赞,让我知道你来过~❥❥❥❥ 0 / 更新Table "iview": &quo ...
- 在 Element-UI 的 Table 组件上添加列拖拽效果
在 Element-UI 的 Table 组件上添加列拖拽效果 一.数据驱动 传统的拖动效果,都是基于通过 mousedown.mousemove.mouseup 事件来修改删减 dom 节点 但 V ...
- Ant Design + react-drag-listview实现Table拖拽变换列位置
Ant Design + react-drag-listview实现Table拖拽变换列位置 Ant Design + react-drag-listview + react-resizable 实现 ...
- antd-table结合react-resizable实现多级表头可拖拽表格
关键字:react-resizable.antd-table.拖拽.多级表头.可变列宽 react-resizablehttps://github.com/react-grid-layout/reac ...
- jQuery实现table表格中行数据上下拖拽功能
jQuery实现table表格中行数据上下拖拽功能 $("#table").sortable({cursor: "move",axis: "y&quo ...
最新文章
- ubuntu下安装ftp服务器
- R语言caret包构建机器学习回归模型(regression model)、使用DALEX包进行模型解释分析、特征重要度、偏依赖分析等
- mysql的存储引擎种类,mysql 存储引擎,基本数据类型
- Python 基础篇-python3安装pyHook和pywin32库
- pandas按照索引来赋值,按照数据表的索引批量给某一个变量赋值的方法。
- while((ch=getchar())!=EOFch != '\n');消除非法输入
- HTTP Status 500 - Servlet.init() for servlet springmvc threw exception
- DNS攻击的主要方式
- Ubuntu 16.04/CentOS 6.9安装Apache压力(并发)测试工具ab
- 基于NHibernate的留言本
- InfoPath中repeationg section动态填充数据
- 【JAVA】Collections.sort()实现动态数组自定义排序
- EDA技术实用教程 | 复习十一 | 状态机的特点和分类
- 如何用CSS把正方形变成圆形
- 逆火效应:该对谁负责?
- 【安全知识分享】工程项目夏季、雨季、夜间、防汛施工安全培训教育(附下载)
- 【PE结构】由浅入深PE基础学习-菜鸟手动查询导出表、相对虚拟地址(RVA)与文件偏移地址转换(FOA)...
- 高斯过程 (Gaussian Process)
- codeblocks 注释取消红色下划线
- Marlon's String zoj3587
热门文章
- 两组数据的偏差率_GWT测试报告 篇七十五:隐患难忽视,RIVAL 3 WIRELESS精准度LOD测试...
- 一点还算不郁闷的郁闷的事
- input[type=file]如何屏蔽“未选择任何文件”
- 2012-2-15雨
- 基于Android的旅游景点推荐
- 将正确的ADC与应用程序匹配
- 商汤科技发布新一代SensePass工业级可视人脸识别门禁全新升级
- Elasticsearch深度探秘搜索技术基于multi_match语法实现dis_max+tie_breaker
- 【深度学习】Pytorch实现CIFAR10图像分类任务测试集准确率达95%
- MySQL日志之错误日志(errorlog)