首頁 > web前端 > js教程 > 表頭固定(利用jquery實作原理介紹)_jquery

表頭固定(利用jquery實作原理介紹)_jquery

WBOY
發布: 2016-05-16 17:48:34
原創
1451 人瀏覽過

表頭固定應該是一個用得比較多的功能,參考了網路上幾個例子,在幾個常用瀏覽器下顯示不是很完美。而且很多都是基於固定的表格,在編碼時多寫一個固定的表頭,對於動態產生的不知道多少列的表格就無從下手。而例子中大多只能滿足限定高度的情況,如果限定寬度,出現橫向捲軸就無能為力了。

我的目的就是要像jquery-ui那樣,找到頁面上存在的表格,呼叫一個方法就可以實現固定表頭的功能。趁著動手學習寫jquery插件的機會,自己寫了一個表頭固定的插件。
使用方式和jquery-ui中的插件一樣,只需要一行程式碼$('#table1').fixHeader({height:100});

下列瀏覽器測試通過
IE7 IE8 firefox16.0 chrome22.0
目前已知IE9下列不能對齊,手頭暫時沒有IE9來調試,以後再想法解決。

說明:
1 需要jquery,開發測試用的jquery-1.8.2,其他版本應該不大
2 表頭部分的

需要寫在裡
3 不限定寬度情況下,自動適應表格寬度(假設捲軸寬度為20px,實際寬度為表格寬度20px)
4 支援多行表頭固定
5 通常表格所有列都顯示,無橫向捲軸,只需要垂直捲軸的功能。此插件支援限定寬度條件下的表頭固定。
6 限定寬度和高度的條件下固定表頭顯示時,表頭固定功能無法單純通過css來實現,需要通過js實現,會有輕微閃爍
7 已經考慮table和th,td的border -width設定成不同值的情況
8 已經考慮了表頭中綁定的事件,原表頭中綁定的事件仍然保留

特別注意:IE瀏覽器下,一定要設定表格中td和th的border-width,否則無法正確設定列寬,表頭和資料部分會錯位
使用方法:
限定高度:$('#table1'). fixHeader({height:100});
限定高度與寬度:$('#table3').fixHeader({height:100,width:500});

下面為完整程式碼
複製程式碼 程式碼如下:

/*!
* fixHeader 1.0.0
* 版權所有2012 chokobo
*
* 修正表頭
*
* 注意:在IE 中設定th,idb-width
*
* 測試瀏覽器:IE7 IE8 firefox16.0 chrome22.0
*/
(function( $, undefined ) {

$.fn.fixHeader = function(options){
var defaults = {
寬度: '',
高度: ''

};

選項= $.extend({}, 預設值, 選項) ; >var elem = this;

if(options.height == ''){
回傳這個;
}

var thead = elem.find('thead' ) ;
var fixTable = elem.clone().empty().removeAttr('id');
//設定頭部預設背景顏色
if(fixTable.css('background-color' ) == '透明' || fixTable.css('背景顏色') == ''){
fixTable.css('背景顏色', '#fff');
}
fixTable . css({
'position': '絕對',
'top': '0px',
'border-bottom': $('tr:eq(0)', thead).find ( 'th:eq(0), td:eq(0)').css('border-bottom-width')
});


$('tr:eq( 0 )', thead).find('th, td').each(function(){
var col = $(this);

if($.browser.mozilla){
col.width(col.width());
}
else if($.browser.chrome){
var colBorderWidth = parseInt(col.css('border-width'));
col.width(col.width() colBorderWidth);
}
else if($.browser.msie){
var colBorderWidth = parseInt(col.css('border-width'));
if(colBorderWidth){
col.width(col.width() colBorderWidth colBorderWidth/2);//IE7??
}
}
});

//製作頭部
var dummyHead = thead.clone();
thead.appendTo(fixTable);
dummyHead.prependTo(elem);


var tbodyWapper =var elem.wrap('
').parent();
var tableWrapper = tbodyWrapper.wrap('
').parent();
setTableWidth();
setWrapperSize();

fixTable.prependTo(tableWrapper);

fixTable.prependTo(tableWrapper);

返回此; 返回此; 返回此; 🎜>
function setTableWidth(){
if($.browser.mozilla){
elem.width(elem.width());
fixTable.css('width',elem.scsth' ('width'));
}
else if($.browser.chrome){
elem.width(elem.outerWidth());
fixTable.width(elem.outerWidth() );
}
else if($.browser.msie){
elem.width(elem.outerWidth());
fixTable.width(elem.outerWidth());
fixTable.width(elem.outerWidth());
}
else{
elem.width(elem.outerWidth());
fixTable.width(elem.outerWidth());
}
}
function set{rapperSeize(unction)
var elemWidth = elem.outerWidth(true);
var elemHeight = elem.outerHeight(true);
varscrollBarWidth = 20;

if(options.fidth = 20;

if(option''width .
tbodyWrapper.css({
'width': (elemWidthscrollBarWidth) 'px',
'height': options.height ,
'overflow-x': '隱藏',
' overflow-y': '自動'
});
}
else{
if(elemWidth tbodyWrapper.css({
'width' : options.width 'px',
'height ': options.height,
'overflow-x': '隱藏',
'overflow-y': 'auto'
});
}
else{
tableWrapper.css({
'width': options.width,
'height': options.height,
'overflow': 'auto'
});
tableWrapper.scroll(function(){
fixTable.css('top',tableWrapper.scrollTop() 'px');
});
}
}
}
};

})( jQuery );
複製程式碼
複製程式碼複製程式碼複製程式碼複製碼>代碼如下:

/*
功能:固定表頭。
使用容器的ID進行設定$("#div").chromatable({width: "100%",height: "100%", scrolling: "yes"})
table必須包含有標籤
參數:無。
*/
(function($){
$.chromatable = {
defaults: {
width: "900px", //設定容器寬度,待擴充程式
height : "300px", //設定容器高度,待擴展程序
scrolling: "yes" //yes跟隨IE滾動條而滑動, no固定在頁面上僅容器滾動條滑動
}
} ;
$.fn.chromatable = function(options){
var options = $.extend({}, $.chromatable.defaults, options);
return this.each(function() {
var $divObj = $(this);
var $tableObj = $divObj.find("table");
var $uniqueID = $tableObj.attr("ID") ("wrapper" );
var $class = $tableObj.attr("class");
var $tableWidth = $tableObj.width();
var top = $("#" $tableObj.attr(" ID" )).offset().top;
var left = $("#" $tableObj.attr("ID")).offset().left
$divObj.append("" $("#" $tableObj.attr("ID")).find("thead").html() " ");

$.each($("#" $tableObj.attr("ID")).find("thead th"), function(i,item){
$(" #" $uniqueID).find("thead th").eq(i).width($(item).width());
$(item).width($(item).width ()) ;
});

if(options.scrolling === "yes")
{
scrollEvent($tableObj.attr("ID"), $uniqueID) ;
}
resizeEvent($tableObj.attr("ID"), $uniqueID);
});

function scrollEvent(tableId, uniqueID)
{
var element = $("#" uniqueID);
$(window).scroll(function(){
var top = $("#" tableId).offset().top;
var scrolls = $( this).scrollTop();

if (scrolls > top) {
if (window.XMLHttpRequest) {
element.css({
position: "fixed" ,
top: 0
});
} else {
element.css({
top: scrolls
});
}
}else {
element. css({
position: "absolute",
top: top
});
}

});
};

function});
};

function resize (tableId, uniqueID)
{
var element = $("#" uniqueID);
$(window).resize(function(){
var top = $(" #" tableId) .offset().top;
var scrolls = $(this).scrollTop();
if (scrolls > top) {
if (window.XMLHttpRequest) {
element.css({
position: "fixed",
top: 0
});
} else {
element.css({
top: scrolls
} )
; }
}else {
element.css({
position: "absolute",
top: top
});
}
}) ;
});
} }) ; }); } }) ; }}); } }) ; }}); } }) ; } }; })(jQuery);
相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板