- 浏览: 50847 次
- 性别:
- 来自: 武汉
文章分类
最新评论
客户要求实现对表格数据的头几行或者头几列进行冻结,即滚动时保持这几行/列不动,通过网上查找代码,参考已有的代码的思路,实现了可以任意对行、列进行冻结。
实现原理:
创建多个div,div之间通过css实现层叠,每个div放置当前表格的克隆。例如:需要行冻结时,创建存放冻结行表格的div,通过设置z-index属性和position属性,让冻结行表格在数据表格的上层。同理,需要列冻结时,创建存放冻结列表格的div,并放置在数据表格的上层。如果需要行列都冻结时,则除了创建冻结行、冻结列表格的div,还需要创建左上角的固定行列表格的div,并放置在所有div的最上层。
处理表格的滚动事件,在表格横向或者纵向滚动时,同时让相应的冻结行和冻结列也同步滚动。
处理html的resize事件,同步修改表格的滚动区域宽度和高度
转载http://aystnd.iteye.com/blog/1872879
实现原理:
创建多个div,div之间通过css实现层叠,每个div放置当前表格的克隆。例如:需要行冻结时,创建存放冻结行表格的div,通过设置z-index属性和position属性,让冻结行表格在数据表格的上层。同理,需要列冻结时,创建存放冻结列表格的div,并放置在数据表格的上层。如果需要行列都冻结时,则除了创建冻结行、冻结列表格的div,还需要创建左上角的固定行列表格的div,并放置在所有div的最上层。
处理表格的滚动事件,在表格横向或者纵向滚动时,同时让相应的冻结行和冻结列也同步滚动。
处理html的resize事件,同步修改表格的滚动区域宽度和高度
/* * 锁定表头和列 * * 参数定义 * table - 要锁定的表格元素或者表格ID * freezeRowNum - 要锁定的前几行行数,如果行不锁定,则设置为0 * freezeColumnNum - 要锁定的前几列列数,如果列不锁定,则设置为0 * width - 表格的滚动区域宽度 * height - 表格的滚动区域高度 */ function freezeTable(table, freezeRowNum, freezeColumnNum, width, height) { if (typeof(freezeRowNum) == 'string') freezeRowNum = parseInt(freezeRowNum) if (typeof(freezeColumnNum) == 'string') freezeColumnNum = parseInt(freezeColumnNum) var tableId; if (typeof(table) == 'string') { tableId = table; table = $('#' + tableId); } else tableId = table.attr('id'); var divTableLayout = $("#" + tableId + "_tableLayout"); if (divTableLayout.length != 0) { divTableLayout.before(table); divTableLayout.empty(); } else { table.after("<div id='" + tableId + "_tableLayout' style='overflow:hidden;height:" + height + "px; width:" + width + "px;'></div>"); divTableLayout = $("#" + tableId + "_tableLayout"); } var html = ''; if (freezeRowNum > 0 && freezeColumnNum > 0) html += '<div id="' + tableId + '_tableFix" style="padding: 0px;"></div>'; if (freezeRowNum > 0) html += '<div id="' + tableId + '_tableHead" style="padding: 0px;"></div>'; if (freezeColumnNum > 0) html += '<div id="' + tableId + '_tableColumn" style="padding: 0px;"></div>'; html += '<div id="' + tableId + '_tableData" style="padding: 0px;"></div>'; $(html).appendTo("#" + tableId + "_tableLayout"); var divTableFix = freezeRowNum > 0 && freezeColumnNum > 0 ? $("#" + tableId + "_tableFix") : null; var divTableHead = freezeRowNum > 0 ? $("#" + tableId + "_tableHead") : null; var divTableColumn = freezeColumnNum > 0 ? $("#" + tableId + "_tableColumn") : null; var divTableData = $("#" + tableId + "_tableData"); divTableData.append(table); if (divTableFix != null) { var tableFixClone = table.clone(true); tableFixClone.attr("id", tableId + "_tableFixClone"); divTableFix.append(tableFixClone); } if (divTableHead != null) { var tableHeadClone = table.clone(true); tableHeadClone.attr("id", tableId + "_tableHeadClone"); divTableHead.append(tableHeadClone); } if (divTableColumn != null) { var tableColumnClone = table.clone(true); tableColumnClone.attr("id", tableId + "_tableColumnClone"); divTableColumn.append(tableColumnClone); } $("#" + tableId + "_tableLayout table").css("margin", "0"); if (freezeRowNum > 0) { var HeadHeight = 0; var ignoreRowNum = 0; $("#" + tableId + "_tableHead tr:lt(" + freezeRowNum + ")").each(function () { if (ignoreRowNum > 0) ignoreRowNum--; else { var td = $(this).find('td:first, th:first'); HeadHeight += td.outerHeight(true); ignoreRowNum = td.attr('rowSpan'); if (typeof(ignoreRowNum) == 'undefined') ignoreRowNum = 0; else ignoreRowNum = parseInt(ignoreRowNum) - 1; } }); HeadHeight += 2; divTableHead.css("height", HeadHeight); divTableFix != null && divTableFix.css("height", HeadHeight); } if (freezeColumnNum > 0) { var ColumnsWidth = 0; var ColumnsNumber = 0; $("#" + tableId + "_tableColumn tr:eq(" + freezeRowNum + ")").find("td:lt(" + freezeColumnNum + "), th:lt(" + freezeColumnNum + ")").each(function () { if (ColumnsNumber >= freezeColumnNum) return; ColumnsWidth += $(this).outerWidth(true); ColumnsNumber += $(this).attr('colSpan') ? parseInt($(this).attr('colSpan')) : 1; }); ColumnsWidth += 2; divTableColumn.css("width", ColumnsWidth); divTableFix != null && divTableFix.css("width", ColumnsWidth); } divTableData.scroll(function () { divTableHead != null && divTableHead.scrollLeft(divTableData.scrollLeft()); divTableColumn != null && divTableColumn.scrollTop(divTableData.scrollTop()); }); divTableFix != null && divTableFix.css({ "overflow": "hidden", "position": "absolute", "z-index": "50" }); divTableHead != null && divTableHead.css({ "overflow": "hidden", "width": width - 17, "position": "absolute", "z-index": "45" }); divTableColumn != null && divTableColumn.css({ "overflow": "hidden", "height": height - 17, "position": "absolute", "z-index": "40" }); divTableData.css({ "overflow": "scroll", "width": width, "height": height, "position": "absolute" }); divTableFix != null && divTableFix.offset(divTableLayout.offset()); divTableHead != null && divTableHead.offset(divTableLayout.offset()); divTableColumn != null && divTableColumn.offset(divTableLayout.offset()); divTableData.offset(divTableLayout.offset()); } /* * 调整锁定表的宽度和高度,这个函数在resize事件中调用 * * 参数定义 * table - 要锁定的表格元素或者表格ID * width - 表格的滚动区域宽度 * height - 表格的滚动区域高度 */ function adjustTableSize(table, width, height) { var tableId; if (typeof(table) == 'string') tableId = table; else tableId = table.attr('id'); $("#" + tableId + "_tableLayout").width(width).height(height); $("#" + tableId + "_tableHead").width(width - 17); $("#" + tableId + "_tableColumn").height(height - 17); $("#" + tableId + "_tableData").width(width).height(height); } function pageHeight() { if ($.browser.msie) { return document.compatMode == "CSS1Compat" ? document.documentElement.clientHeight : document.body.clientHeight; } else { return self.innerHeight; } }; //返回当前页面宽度 function pageWidth() { if ($.browser.msie) { return document.compatMode == "CSS1Compat" ? document.documentElement.clientWidth : document.body.clientWidth; } else { return self.innerWidth; } }; $(document).ready(function() { var table = $("table"); var tableId = table.attr('id'); var freezeRowNum = table.attr('freezeRowNum'); var freezeColumnNum = table.attr('freezeColumnNum'); if (typeof(freezeRowNum) != 'undefined' || typeof(freezeColumnNum) != 'undefined') { freezeTable(table, freezeRowNum || 0, freezeColumnNum || 0, pageWidth(), pageHeight()); var flag = false; $(window).resize(function() { if (flag) return ; setTimeout(function() { adjustTableSize(tableId, pageWidth(), pageHeight()); flag = false; }, 100); flag = true; }); } });
<table id="reportTable" width="1900" freezeRowNum="2" freezeColumnNum="2" class="report" align="center"> ... </table>
转载http://aystnd.iteye.com/blog/1872879
- 0b5fb98d-4edd-3cc9-bacd-045f86962d05.rar (34.7 KB)
- 下载次数: 3
相关推荐
本篇文章将详细介绍如何利用这两种技术在HTML表格中实现行和列的冻结。 首先,理解HTML表格的基础结构至关重要。HTML `<table>` 标签用于创建表格,而`<tr>` 表示行,`<th>` 用于定义表头,`<td>` 用于定义数据...
总之,JS表格表头和列的冻结固定是一种增强用户体验的有效手段,通过HTML5和JavaScript的结合,我们可以轻松实现这一功能。实践过程中,理解DOM操作、CSS布局以及事件监听等基础知识至关重要。希望这篇文章能为你在...
JS 冻结表格: 冻结表格的示例代码 支持主流浏览器,IE也OK. HTML文件直接运行
本主题主要围绕"table的行列冻结、行冻结、列冻结"展开,讲解如何使用jQuery实现这一功能,并确保其在主流浏览器上的兼容性。 首先,"行列冻结"是指在表格中固定特定的行和列,即使在用户滚动页面时,这些行和列也...
在这篇文章中,我们将学习如何使用 JavaScript 实现冻结列、调整列宽的功能,以便提高数据表格的可读性和交互性。 知识点 1:数据表格的基本结构 在 HTML 中,我们使用 `<TABLE>` 元素来创建数据表格。每个表格由...
实现`Asp.net 表格列冻结`通常涉及到前端和后端的协同工作。在本例中,描述中提到了采用了jQuery插件来实现这一功能。jQuery是一个强大的JavaScript库,它简化了DOM操作、事件处理、动画以及Ajax交互等任务,非常...
4. **应用样式**:当滚动条达到一定的位置后(即超过了需要冻结的列的初始位置),给冻结列添加特定的样式,使其相对于容器固定。 #### 具体实现 根据题目提供的代码片段,我们可以进一步解析实现步骤: 1. **...
使用这个插件,开发者只需要引入相关JS文件,然后调用插件方法,即可快速地为自己的表格添加行和列冻结功能。例如: ```javascript $(document).ready(function() { $("#myTable").tableFreeze({ freezeRows: 1, ...
`freez-table-demo.htm`可能是一个包含冻结表格功能的HTML示例文件,它可能展示了如何结合HTML、CSS和JavaScript实现表格冻结。而`scripts`可能是包含实现该功能的JavaScript代码的文件夹,可能包含了自定义的脚本或...
与冻结行类似,冻结列是将某一列固定在屏幕左侧,比如将第一列的分类信息固定,这样用户在水平滚动时仍能看到分类信息,方便查找和对比。 在jsp中,我们可以使用JavaScript库,如jQuery,配合CSS来实现这个效果。...
一个冻结表格左侧列功能的js脚本, 在使用bootstrap冻结左侧列功能时,bootstrap-table-fixed-columns.js插件与我项目不兼容,不生效,所以自己参考着做了一个,功能未完善,现有功能:冻结左侧列,和可选冻结列数
实现列冻结的基本思路是创建一个新的表格,该表格只包含需要冻结的列,然后将其定位在原表格左侧,使其始终在可视区域内。以下是一些关键步骤: 1. **HTML结构**:确保你的表格(`<table>`)有正确的结构,每个...
在JavaScript(JS)中,冻结表头和列是一项常见的需求,特别是在处理大数据表格时,保持表头固定不动以便用户能够更容易地浏览和理解表格内容。本文将深入探讨如何实现这一功能,同时也会提及一些相关工具和源码示例...
对于更复杂的冻结列需求,可能需要对表格进行分块处理,并在JavaScript中处理每个区块的位置。这可能涉及到表格内部的子表格或使用额外的div来包裹冻结列。 总的来说,实现ASP.NET WebForm中的冻结列和冻结表头功能...
此时,"表格冻结"功能显得尤为重要,它允许用户在滚动时始终保持某些列或行可见。本示例将详细讲解如何使用jQuery来实现这一功能。 jQuery是一个流行的JavaScript库,它简化了DOM操作、事件处理和动画效果,使得...
JS冻结窗格(表头锁定)插件,自适应表格单元格宽度,兼容主流浏览器(注:不兼容IE9以下版本的IE浏览器),代码调用方式 $.frozen(tableElement或tableId,{参数...},force:是否强制冻结,因为有防止重复冻结功能),...
而 "kvf-treegrid.js" 则是 JavaScript 文件,包含了实现冻结功能的逻辑代码,可能涉及到事件监听、DOM 操作以及与 EasyUI TreeGrid 的接口集成。 4. **集成到项目**: 使用这个插件,开发者需要将这两个文件引入到...
"sencha touch表格冻结首列demo实例"是一个示例,演示了如何在Sencha Touch应用中实现这一功能,使表格的首列始终固定在屏幕左侧,即使用户滚动内容,首列也会悬浮显示。 要实现这个效果,首先需要引入Ext.ux.touch...
该插件名为"jQuery-Plugin-To-Freeze-Table-Columns-Rows-On-Scroll",其主要功能是在表格滚动时保持顶部行和左侧列固定,以便用户在浏览长表格时仍能清晰地看到表头和关键列。以下我们将深入探讨这个插件的工作原理...
在这个代码中,CSS 用于创建表格的基本布局,包括单元格的间距、边框、颜色等,同时通过定位技巧(如 position: fixed)来实现表头和冻结列的固定效果。CSS3 的新特性,如伪类选择器、过渡效果等,可能也被用到,以...