el table 固定表头和首行_bootstrap table 固定 表头 冻结 窗格 固定首行 冻结首行 fixed 对齐 分享...

该博客介绍了如何解决Bootstrap Table在分页时因内容变化导致的宽度不一致问题,通过动态调整固定表头的宽度和位置,实现固定表头和首行。内容包括删除并重新生成表头、计算相关元素的高度和宽度、监听滚动事件来同步滚动效果,确保固定表头的正确显示。
摘要由CSDN通过智能技术生成

改成这样即可解决溢出的BUG

//首行//点击分页时候内容改变了,表格宽度就有变化,我们需要动态的修改固定表头的宽度,所以开始的时候删除上次添加的表头重新生成

if($("#shelter").length > 0) {

//元素存在时执行的代码

$('#shelter').remove();

}

var sourceTable = $("#table");//源表格的ID

var sourceTableHead = $("#table thead");//需要的表头部分

var headHeight = sourceTableHead.height();//部分的高度

var sourceTableWidth = sourceTable.outerWidth(); //源表格宽度

var testDiv = $(".fixed-table-body"); //测试内容宽度

var wrapDiv = $(".fixed-table-container"); //滚动条外部ID,测量DIV与头部的高度

var tempTop = wrapDiv.offset().top - $(window).scrollTop(); //测量DIV与网页的高度

//从源表格copy一个份表头和其中元素插入

//插入一个表格用来存放我们要固定的表头

$('#table').append('

var maintable = $("#maintable");

var fixTopDiv = $("#shelter");

fixTopDiv.hide();

maintable.hide();

//首行固定,首行先左侧滑动

fixTopDiv.css({

'height':headHeight,

'position':'relative',

'top':tempTop+"px",

'left':'30',

'width':testDiv.width()+"px",

'overflow':'hidden'

});

//设置fixed表头的宽度与源一致

$("#fixed_table_wrap,#fixed_table").css({'width':sourceTableWidth+"px"});

//设置每一个th元素与源th宽度一致达到对齐的效果,并且每次点击分页按钮时候都会重新设置

var targetHead = sourceTableHead.clone().attr('id','fix_head');

//这个加入位置比较偷懒的继承了bootstrap-table的结构css样式,使得的表头与源表样式一致

targetHead.appendTo('#fixed_table');

$("#table thead tr th").each(function(index,value){

var tempWidth = $(value).outerWidth();

var tempHeight = $(value).outerHeight();

$("#fixed_table th").eq(index).css({'width':tempWidth+"px",'height':tempHeight+"px"});

});

//div内容scroll

wrapDiv=$(".fixed-table-body");

wrapDiv.scroll(function(){

//与源表格同步左右滑动

var sl=-Math.max(wrapDiv.scrollLeft(),$('document').scrollLeft());

if(isNaN(sl)){

sl = - wrapDiv.scrollLeft();

}

fixTopDiv.css("left",(sl+30)+'px');

var scroll_top = wrapDiv.scrollTop() - headHeight + $(window).scrollTop();

tempTop = wrapDiv.offset().top - $(window).scrollTop();

if(tempTop <= 0){

tempTop = 0;

}

var baseWidth = testDiv.width() + wrapDiv.scrollLeft();

//控制隐藏或显示

if (scroll_top >= 0) {

fixTopDiv.css({'top':(tempTop-30) +"px",'width':baseWidth+"px"});

if(!fixTopDiv.is(':visible')){

fixTopDiv.show();

maintable.show();

}

}else {

if(fixTopDiv.is(':visible')){

fixTopDiv.hide();

maintable.hide();

}

}

});

//浏览器scroll

$(window).on('scroll',function(){

tempTop = wrapDiv.offset().top - $(window).scrollTop();

var scroll_top = wrapDiv.scrollTop() - headHeight + $(window).scrollTop();

var baseWidth = testDiv.width() + wrapDiv.scrollLeft();

if(tempTop <= 0){

tempTop = 0;

}

fixTopDiv.css({'top':(tempTop-30) +"px",'width':baseWidth+"px"});

//控制显示或输出

if (scroll_top >= 0) {

if(!fixTopDiv.is(':visible')){

fixTopDiv.show();

maintable.show();

}

}else {

if(fixTopDiv.is(':visible')){

fixTopDiv.hide();

maintable.hide();

}

}

});

//首行结束

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值