摘自:http://s.yanghao.org/program/viewdetail.php?i=61717
因为与自己的实际情况有些不同,简单的改造了下。。。如果有版权问题,请留言。。。

锁定Table表格首行首列(可自己指定)

拖拽Table标题列宽

扩展Jquery插件

View Code

// 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 样式

View Code

.resizeDivClass
{text-align: right;width: 2px;height: 100%;margin-left:auto;margin-right:0px;border: 0px;float: right;cursor: e-resize;
}

事例

View Code

<!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 锁定表格首行首列、拖拽表格列宽相关推荐

  1. Element UI表格拖拽(vue中) —— 行拖拽、列拖拽

    目录 安装依赖 vuedraggable 实现拖拽的要点 行拖拽要点 列拖拽要点 完整范例代码 安装依赖 vuedraggable 安装  vuedraggable 的同时,会自动安装 sortabl ...

  2. html表格列拖拽,table表格列顺序拖拽和列宽度拖拽

    目前项目要求对表格可进行宽度拖拽和排序拖拽.用的第三方库库ant-desigin-vue. 对于列宽度拖拽 在ant-desigin-vue的table示例中有对应的案例,但是直接复制代码,会报错.最 ...

  3. 前端elementui表格拖拽sortablejs避坑,vue2前端表格列拖拽解决方案

    sortablejs sortablejs是目前比较多人用的elementui表格拖拽的插件,但是这个插件的bug很不友好:主要bug是拖拽列后不能调整列的宽,处理这个bug只能是不让用户调整列宽. ...

  4. 【Axure视频教程】固定中继器表格首行首列

    今天教大家在Axure里如何制作固定中继器表格首行首列的原型模板,包括固定首行(标题行)和首列.固定首行(标题行)和前两列两个案例,因为是用中继器表格制作的,所以使用也非常方便,我们只需要在中继器表格 ...

  5. iview table 自定义列_案例 | iview中Table:拖拽适配列、自定义固定列、合并行

    文 / 景朝霞 来源公号 / 朝霞的光影笔记 ID / zhaoxiajingjing ❥❥❥❥点个赞,让我知道你来过~❥❥❥❥ 0 / 更新Table "iview": &quo ...

  6. 在 Element-UI 的 Table 组件上添加列拖拽效果

    在 Element-UI 的 Table 组件上添加列拖拽效果 一.数据驱动 传统的拖动效果,都是基于通过 mousedown.mousemove.mouseup 事件来修改删减 dom 节点 但 V ...

  7. Ant Design + react-drag-listview实现Table拖拽变换列位置

    Ant Design + react-drag-listview实现Table拖拽变换列位置 Ant Design + react-drag-listview + react-resizable 实现 ...

  8. antd-table结合react-resizable实现多级表头可拖拽表格

    关键字:react-resizable.antd-table.拖拽.多级表头.可变列宽 react-resizablehttps://github.com/react-grid-layout/reac ...

  9. jQuery实现table表格中行数据上下拖拽功能

    jQuery实现table表格中行数据上下拖拽功能 $("#table").sortable({cursor: "move",axis: "y&quo ...

最新文章

  1. ubuntu下安装ftp服务器
  2. R语言caret包构建机器学习回归模型(regression model)、使用DALEX包进行模型解释分析、特征重要度、偏依赖分析等
  3. mysql的存储引擎种类,mysql 存储引擎,基本数据类型
  4. Python 基础篇-python3安装pyHook和pywin32库
  5. pandas按照索引来赋值,按照数据表的索引批量给某一个变量赋值的方法。
  6. while((ch=getchar())!=EOFch != '\n');消除非法输入
  7. HTTP Status 500 - Servlet.init() for servlet springmvc threw exception
  8. DNS攻击的主要方式
  9. Ubuntu 16.04/CentOS 6.9安装Apache压力(并发)测试工具ab
  10. 基于NHibernate的留言本
  11. InfoPath中repeationg section动态填充数据
  12. 【JAVA】Collections.sort()实现动态数组自定义排序
  13. EDA技术实用教程 | 复习十一 | 状态机的特点和分类
  14. 如何用CSS把正方形变成圆形
  15. 逆火效应:该对谁负责?
  16. 【安全知识分享】工程项目夏季、雨季、夜间、防汛施工安全培训教育(附下载)
  17. 【PE结构】由浅入深PE基础学习-菜鸟手动查询导出表、相对虚拟地址(RVA)与文件偏移地址转换(FOA)...
  18. 高斯过程 (Gaussian Process)
  19. codeblocks 注释取消红色下划线
  20. Marlon's String zoj3587

热门文章

  1. 两组数据的偏差率_GWT测试报告 篇七十五:隐患难忽视,RIVAL 3 WIRELESS精准度LOD测试...
  2. 一点还算不郁闷的郁闷的事
  3. input[type=file]如何屏蔽“未选择任何文件”
  4. 2012-2-15雨
  5. 基于Android的旅游景点推荐
  6. 将正确的ADC与应用程序匹配
  7. 商汤科技发布新一代SensePass工业级可视人脸识别门禁全新升级
  8. Elasticsearch深度探秘搜索技术基于multi_match语法实现dis_max+tie_breaker
  9. 【深度学习】Pytorch实现CIFAR10图像分类任务测试集准确率达95%
  10. MySQL日志之错误日志(errorlog)