birt系列(1) |
您所在的位置:网站首页 › excel2003冻结表头 › birt系列(1) |
小厂,用的开源birt做报表,不太符合用户对报表的操作习惯。 用户对报表希望: 自定义显示、隐藏列;自定义报表列的显示顺序;自定义报表列宽度;按用户选择的列对表格数据排序冻结表头所有冻结表头,都是把表头元素设置成绝对定位,在页面滚动的时候,根据滚动值修正元素top值。 冻结表头的实现1:普通列表的表头冻结 结表头的实现2:单层交叉列表的表头冻结---交叉表头固定的情况 结表头的实现3:单层交叉列表的表头冻结---交叉表头是动态的 结表头的实现4:单层交叉列表的表头冻结---多层交叉表 这种情况,把表头区分为固定区,固定区,固定区表头按固定区的方式处理 动态区表头,需要分行处理 冻结表头的实现1:原理:把table header 设置成绝对定位。然后,在滚动事件中,动态修改top值即可。 但是,设置成绝对定位后,由于元素脱离了原来的流。宽度缩小了,因此,代码中,要动态设置每列的宽度。 截图如下: (简单设置绝对定位的效果) HTML/CSS里面的绝对定位是脱离标准文档流的吗? 是的,绝对定位和浮动都脱离了标准文档流,但是相对定位并没有脱离; 首先要解决脚本放什么地方的问题,其次要如何识别表头。 脚本放什么位置?上图说明 (前端代码位置) 识别表头?就是设置表头id (设置表头id的位置) 表头宽度设置,代码我考虑3种方式: 1、把table 设置position属性,把表头设置为相对定位,这样做的好处是不用设置表头列宽度,但这个方案测试了一把,通不过。如果把表头设置为绝对定位,就脱离原来的流u,一样会导致列宽改变。 2、把table header row 设置为绝对定位,取得整个表格的宽度?把头部宽度设成table宽度?整个测试无效果 因为获取的table的width,值为100%,而表头已经脱离流了,不受table影响,除非设置成绝对值,但预估应该是不行的,没有继续测试了。 3、获取表格的每一列宽度,设置到th当中去; 这有3种做法: 一个是从col属性当中获取;问题是birt得用原生的js获取col属性,另外,col是不是过时了?这个方法没有深入尝试。 一个是特定行,从特定行当中,取得每个单元格的宽度,设置到TH当中;这个不想尝试,觉得麻烦。 用新的属性,可以通过,但是,必须把表单布局改为固定布局,下面代码就是这种方式 function lockHeader(){ //设置表列头宽度的代码 var widthArray=new Array(); var ras=document.getElementById('ra'); var ths=ras.children; for(var i=0;i |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |