最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

表頭固定(利用jquery實現(xiàn)原理介紹)

 更新時間:2012年11月08日 14:23:03   作者:  
表頭固定應(yīng)該是一個用得比較多的功能,參考了網(wǎng)上幾個例子,在幾個常用瀏覽器下顯示不是很完美
表頭固定應(yīng)該是一個用得比較多的功能,參考了網(wǎng)上幾個例子,在幾個常用瀏覽器下顯示不是很完美。而且很多都是基于固定的表格,在編碼時多寫一個固定的表頭,對于動態(tài)生成的不知道多少列的表格就無從下手。而且例子中大多只能滿足限定高度的情況,如果限定寬度,出現(xiàn)橫向滾動條就無能為力了。

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

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

說明:
1 需要jquery,開發(fā)測試用的jquery-1.8.2,其他版本應(yīng)該不大
2 表頭部分的<tr>需要寫在<thead>里
3 不限定寬度情況下,自動適應(yīng)表格寬度(假設(shè)滾動條寬度為20px,實際寬度為表格寬度+20px)
4 支持多行表頭固定
5 通常表格所有列都顯示,無橫向滾動條,只需要豎向滾動條的功能。該插件支持限定寬度條件下的表頭固定。
6 限定寬度和高度的條件下固定表頭顯示時,表頭固定功能無法單純通過css來實現(xiàn),需要通過js實現(xiàn),會有輕微閃爍
7 已經(jīng)考慮table和th,td的border-width設(shè)置成不同值的情況
8 已經(jīng)考慮了表頭中綁定的事件,原表頭中綁定的事件仍然保留

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

下面為完整代碼
復(fù)制代碼 代碼如下:

/*!
* fixHeader 1.0.0
* Copyright 2012 chokobo
*
* make table header fixed
*
* notice: set th,id border-width in IE
*
* tested browser: IE7 IE8 firefox16.0 chrome22.0
*/
(function( $, undefined ) {

$.fn.fixHeader = function(options){
var defaults = {
width: '',
height: ''

};

options = $.extend({}, defaults, options);
var elem = this;

if(options.height == ''){
return this;
}

var thead = elem.find('thead');
var fixTable = elem.clone().empty().removeAttr('id');
//set head default background-color
if(fixTable.css('background-color') == 'transparent' || fixTable.css('background-color') == ''){
fixTable.css('background-color', '#fff');
}
fixTable.css({
'position': 'absolute',
'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??
}
}
});

//make head
var dummyHead = thead.clone();
thead.appendTo(fixTable);
dummyHead.prependTo(elem);


var tbodyWrapper = elem.wrap('<div class="body-wrapper"></div>').parent();
var tableWrapper = tbodyWrapper.wrap('<div class="table-wrapper" style="position:relative;"/>').parent();
setTableWidth();
setWrapperSize();

fixTable.prependTo(tableWrapper);

return this;

function setTableWidth(){
if($.browser.mozilla){
elem.width(elem.width());
fixTable.css('width',elem.css('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());
}
else{
elem.width(elem.outerWidth());
fixTable.width(elem.outerWidth());
}
}
function setWrapperSize(){
var elemWidth = elem.outerWidth(true);
var elemHeight = elem.outerHeight(true);
var scrollBarWidth = 20;

if(options.width == ''){
tbodyWrapper.css({
'width': (elemWidth+scrollBarWidth) + 'px',
'height': options.height,
'overflow-x': 'hidden',
'overflow-y': 'auto'
});
}
else{
if(elemWidth <= options.width){
tbodyWrapper.css({
'width': options.width+'px',
'height': options.height,
'overflow-x': 'hidden',
'overflow-y': 'auto'
});
}
else{
tableWrapper.css({
'width': options.width,
'height': options.height,
'overflow': 'auto'
});
tableWrapper.scroll(function(){
fixTable.css('top',tableWrapper.scrollTop()+'px');
});
}
}
}
};

})( jQuery );

復(fù)制代碼 代碼如下:

/*
功能:固定表頭。
使用容器的ID進(jìn)行設(shè)定$("#div").chromatable({width: "100%",height: "100%", scrolling: "yes"})
table必須包含有<thead>標(biāo)籤
參數(shù):無。
*/
(function($){
$.chromatable = {
defaults: {
width: "900px", //設(shè)定容器寬度,待擴展程式
height: "300px", //設(shè)定容器高度,待擴展程式
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("<table class='"+$class+"' id='"+$uniqueID+"' style='position:absolute;top:" +top+"px;left:"+left+"px;' width='"+$tableWidth+"' border='0' cellspacing='0' cellpadding='0'><thead>"+$("#"+$tableObj.attr("ID")).find("thead").html()+"</thead></table>");

$.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 resizeEvent(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);

相關(guān)文章

  • 使用jquery實現(xiàn)鼠標(biāo)滑過彈出更多相關(guān)信息層附源碼下載

    使用jquery實現(xiàn)鼠標(biāo)滑過彈出更多相關(guān)信息層附源碼下載

    當(dāng)要在有限的空間展示更多的信息時,我們經(jīng)常會采取鼠標(biāo)滑過彈出更多相關(guān)信息層,提高互動性。尤其可以應(yīng)用在公司照片墻、招聘網(wǎng)站求職者信息展示等等場景,本文給大家分享使用jquery實現(xiàn)鼠標(biāo)滑過彈出更多相關(guān)信息層附源碼下載,感興趣的朋友參考下
    2015-11-11
  • jQuery讀取本地的json文件(實例講解)

    jQuery讀取本地的json文件(實例講解)

    下面小編就為大家?guī)硪黄猨Query讀取本地的json文件(實例講解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10
  • jQuery實現(xiàn)點擊按鈕彈出可關(guān)閉層的浮動層插件

    jQuery實現(xiàn)點擊按鈕彈出可關(guān)閉層的浮動層插件

    這篇文章主要介紹了jQuery實現(xiàn)點擊按鈕彈出可關(guān)閉層的浮動層插件,具有點擊彈出帶有遮罩層的浮動層效果,且浮動層可拖動、可關(guān)閉,需要的朋友可以參考下
    2015-09-09
  • jQuery實現(xiàn)Ajax聊天機器人完成案例

    jQuery實現(xiàn)Ajax聊天機器人完成案例

    從微信開發(fā)的時候,有了一個與人對話的機器人之后,本文主要實現(xiàn)jQuery實現(xiàn)Ajax聊天機器人完成案例,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • jQuery仿IOS彈出框插件

    jQuery仿IOS彈出框插件

    這款彈出框插件是本人自己模仿IOS原生彈出框?qū)懙囊粋€自定義插件,包括Alert彈出框和Confirm確認(rèn)框,支持標(biāo)題,內(nèi)容,按鈕文字以及按鈕回調(diào)函數(shù)自定義,使用非常簡單,本文給大家介紹了jQuery仿IOS彈出框插件,需要的朋友可以參考下
    2017-02-02
  • JQuery實現(xiàn)鼠標(biāo)移動圖片顯示描述層的方法

    JQuery實現(xiàn)鼠標(biāo)移動圖片顯示描述層的方法

    這篇文章主要介紹了JQuery實現(xiàn)鼠標(biāo)移動圖片顯示描述層的方法,涉及jQuery鼠標(biāo)事件及動畫效果的使用技巧,需要的朋友可以參考下
    2015-06-06
  • JQuery實現(xiàn)網(wǎng)頁右側(cè)隨動廣告特效

    JQuery實現(xiàn)網(wǎng)頁右側(cè)隨動廣告特效

    本文給大家分享的是2則使用jquery實現(xiàn)網(wǎng)頁右側(cè)隨動廣告特效的代碼,非常的簡單實用,有需要的小伙伴可以參考下。
    2016-01-01
  • 使用CSS和jQuery模擬select并附提交后取得數(shù)據(jù)的代碼

    使用CSS和jQuery模擬select并附提交后取得數(shù)據(jù)的代碼

    使用CSS和jQuery模擬select并實現(xiàn)提交后取得數(shù)據(jù),詳細(xì)實現(xiàn)及截圖如下,感興趣的朋友可以參考下
    2013-10-10
  • jQuery實現(xiàn)連續(xù)動畫效果實例分析

    jQuery實現(xiàn)連續(xù)動畫效果實例分析

    這篇文章主要介紹了jQuery實現(xiàn)連續(xù)動畫效果,實例分析了animate方法實現(xiàn)動畫效果的相關(guān)技巧,并備有較為詳盡的注釋供讀者學(xué)習(xí)參考,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-10-10
  • jQuery插件zTree實現(xiàn)的基本樹與節(jié)點獲取操作示例

    jQuery插件zTree實現(xiàn)的基本樹與節(jié)點獲取操作示例

    這篇文章主要介紹了jQuery插件zTree實現(xiàn)的基本樹與節(jié)點獲取操作,結(jié)合實例形式分析了jQuery樹形插件zTree構(gòu)造基本樹與針對節(jié)點的獲取操作相關(guān)實現(xiàn)技巧,需要的朋友可以參考下
    2017-03-03

最新評論

隆子县| 宝清县| 南投县| 辉南县| 阜新市| 基隆市| 绥中县| 泾源县| 靖远县| 临夏县| 南昌市| 安丘市| 兴业县| 兖州市| 镇沅| 岗巴县| 儋州市| 葵青区| 弥渡县| 汕尾市| 横峰县| 固阳县| 延庆县| 金川县| 沽源县| 永川市| 邹城市| 阿拉尔市| 临安市| 伊宁县| 东安县| 吴桥县| 库尔勒市| 罗田县| 克什克腾旗| 临安市| 乐业县| 永宁县| 上虞市| 隆化县| 张家口市|