JS(JQ)實現table表格固定表頭且表頭可以隨橫向滾動而滾動
阿新 • • 發佈:2018-12-04
先看一張效果圖
思路:
1、頭部用一個table並用一個div包裹著, 表格的具體內容用一個table
2、頭部外面的div用positon: relative相對定位
3、獲取整個表格的高度
4、獲取表格的dom(或者包裹著表格的dom)距離頁面頂部的距離 offsetTop
5、滾動的零界點的距離 表格的高度+表格距離頁面頂部的距離 如果滾動超過這個 就讓頭部的top值歸0或原封不動
當然還有很多可以優化的地方 我只是展示一個小思路 嘿嘿嘿
題外話 為啥用紅色表頭 因為顯眼哇 哈哈
JS程式碼
/**
* 最重要的一點是頭和身體是兩個table 然後定位用relative 然後通過滾動來計算
* */
function FixedHead (){
if( !(this instanceof FixedHead) ){
return new FixedHead()
};
this.$dom = $('.dataTables_scrollHead'); // 表頭外層dom
this.offsetTop = this.$dom.offset().top; // 表頭外層dom距離頂部的高度
this .parents = this.$dom.parents('.dataTables_scroll'); // 表頭外層dom最外面的盒子(包裹著table的盒子)
this.outBoxHeight = this.parents.height(); // 表頭外層dom最外面的盒子(包裹著table的盒子)的高度
this.maxHeight = this.offsetTop + this.outBoxHeight; // 滾動的零界點 最多能滾動到哪裡
this.scroll();
}
FixedHead.prototype = {
constructor: FixedHead,
scroll: function (){
var that = this;
$(window).scroll(function(){
var scrollTop = $(this).scrollTop();
if((scrollTop > that.offsetTop) && (scrollTop < that.maxHeight)){
that.$dom.css('top', (scrollTop - that.offsetTop + 50)+'px') // 這個50是因為我的頭部導航固定在頂部 高是50 所以要加上
}else {
var topCss = that.$dom.css('top');
if(topCss === '0px' || topCss === 'auto'){
}else {
that.$dom.css('top', '0px')
}
}
})
}
}