还记得之前公司需要做表头固定,但是由于基础太差,去查了好多好多文档。最后总结出几个不错的方法和插件。
一、使用css + js来实现表头固定
使用css定位th 根据父级滚动条scrolltop的偏移量获取值,在用js把偏移量赋值到th的定位top上。就做到了表头固定。(此方法需要固定高度)
项目demo
css样式部分 主要是出现滚动条和定位th还有固定高度。
<style> .table-responsive { overflow: auto !important; .table-th-css { background: #EFEFF4 !important; position: relative !important; text-align: center; top: 0; .section-scroll{ height:417px; </style>
html部分 自己做肯定内容超级多 demo我就不复制那么多内容了。
<div class="table-responsive section-scroll"> <table class="table table-bordered"> <thead class="table-header"> <th class="table-th-css"> <div>部门</div> <th class="table-th-css"> <div>用户名称</div> <th class="text-center table-th-css"> <div>1月</div> <th class="text-center table-th-css"> <div>2月</div> <th class="text-center table-th-css"> <div>3月</div> <th class="text-center table-th-css"> <div>4月</div> <th class="text-center table-th-css"> <div>5月</div> <th class="text-center table-th-css"> <div>6月</div> <th class="text-center table-th-css"> <div>7月</div> <th class="text-center table-th-css"> <div>8月</div> <th class="text-center table-th-css"> <div>9月</div> <th class="text-center table-th-css"> <div>10月</div> <th class="text-center table-th-css"> <div>11月</div> <th class="text-center table-th-css"> <div>12月</div> <th class="text-center table-th-css"> <div>合计</div> </thead> <tbody > <tr class="text-center" > 多毛大叔爱萝莉 <td class="table-textWidth"> 多毛大叔爱萝莉 多毛大叔爱萝莉 多毛大叔爱萝莉 多毛大叔爱萝莉 多毛大叔爱萝莉 多毛大叔爱萝莉 多毛大叔爱萝莉 多毛大叔爱萝莉 多毛大叔爱萝莉 多毛大叔爱萝莉 多毛大叔爱萝莉 多毛大叔爱萝莉 多毛大叔爱萝莉 多毛大叔爱萝莉 </tbody> </table>
js内容 使用jq的on事件,监听滚动根据我自己项目的样式修改了下自己的样式。大家使用可自行调整。
var tableCont = $('.section-scroll tr th'); //获取th var tableCont_child = $('.section-scroll tr th div'); //获取th下边的div var tableScroll = $('.section-scroll'); //获取滚动条同级的class function scrollHandle() { var scrollTop = tableScroll.scrollTop(); // 当滚动距离大于0时设置top及相应的样式 if (scrollTop > 0) { tableCont.css({ "top": scrollTop + 'px', "marginTop": "-1px", "padding": 0 tableCont_child.css({ "borderTop": "1px solid gainsboro", "borderBottom": "1px solid gainsboro", "marginTop": "-1px", "padding": "8px" } else { // 当滚动距离小于0时设置top及相应的样式 tableCont.css({ "top": scrollTop + 'px', "marginTop": "0", tableCont_child.css({ "border": "none", "marginTop": 0, "marginBottom": 0,