検索
ホームページウェブフロントエンドjsチュートリアル固定ヘッダー (jquery を使用した実装原理の紹介)_jquery

テーブルヘッダーの固定は頻繁に使用される機能であるはずですが、インターネット上のいくつかの例を参照しましたが、一般的に使用されるいくつかのブラウザーでは表示が完璧ではありません。さらに、それらの多くは固定テーブルに基づいており、コーディング時に固定ヘッダーを記述する必要があるため、列数が不明な動的に生成されたテーブルを開始することが困難になります。さらに、ほとんどの例では高さの制限しか満たせません。幅が制限されていると、水平スクロール バーが表示されても仕方がありません。

私の目的は、jquery-ui のようにページ上に存在するテーブルを検索し、ヘッダーを修正する機能を実現するメソッドを呼び出すことです。 jquery プラグインの作成を学ぶ機会を利用して、固定ヘッダーを持つプラグインを作成しました。
使用法は jquery-ui のプラグインと同じです。必要なコードは $('#table1').fixHeader({height:100}); だけです。 >次のブラウザのテストは成功しました

IE7 IE8 firefox16.0 chrome22.0 現在、IE9 ではデバッグできるものが手元にないので試してみます。後で解決するように。

注:

1 jquery が必要です。jquery-1.8.2 は開発とテストに使用されます。他のバージョンは小さい必要があります。 2ヘッダー部分は 3 に記述する必要があります 幅を制限せずにテーブルの幅に自動的に適応します (スクロールバーの幅が 20px であると仮定すると、実際の幅はテーブルの幅 20px になります)
4 マルチサポート行ヘッダー固定
5 通常、表のすべての列が表示され、水平スクロールバーはなく、垂直スクロールバーの機能のみが必要です。このプラグインは、幅が制限された条件下でのテーブル ヘッダーの固定をサポートします。
6 幅と高さを制限した条件でテーブルヘッダーを固定する場合、テーブルヘッダーの固定機能は CSS で実装する必要があり、若干のちらつきが発生します。 7 table、th、td の境界線が考慮されています。 -width は異なる値に設定されています
8 ヘッダーにバインドされているイベントが考慮されており、元のヘッダーにバインドされているイベントは引き続き保持されます


特別な注意:
IE の閲覧 ブラウザ下では、テーブル内の td と th のボーダー幅を必ず設定してください。そうしないと、列幅が正しく設定されず、ヘッダー部分とデータ部分が正しく設定されません。
使用法:
高さの制限: $('#table1').fixHeader({height:100}); 高さと幅の制​​限: $('#table3').fixHeader({ height:100,width:500});
以下は完全なコードです




コードをコピーします

は次のとおりです:

/*!
* fixHeader 1.0.0
* Copyright 2012 chokobo
*
* テーブルヘッダーを修正
*
* 注意: IE で th,id border-width を設定
*
* テスト済みブラウザ: IE7 IE8 firefox16.0 chrome22.0
*/
(function( $, unknown ) {

$.fn.fixHeader = function(options){
var デフォルト = {
幅: '',
高さ: ''

};

オプション = $.extend({}, デフォルト, オプション); >var elem = this;

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

var thead = elem.find('thead') ;
var fixTable = elem.clone().empty().removeAttr('id');
//頭のデフォルトの背景色を設定します
if(fixTable.css('background-color') == '透明' || fixTable.css('背景色') == ''){
fixTable.css('背景色', '#fff');
.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()colBorderWidthcolBorderWidth/2);//IE7??
}
}
});

//ヘッドを作成します
var dummyHead = thead.clone();
thead.appendTo(fixTable);
dummyHead.prependTo(elem);


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

fixTable.prependTo(tableWrapper);

これを返します;

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 スクロールバー幅 = 20;

if(options.width == ''){
tbodyWrapper.css({
'width': (elemWidthscrollBarWidth) 'px',
'height': options.height 、
'overflow-x': 'hidden'、
'overflow-y': 'auto'
});
}
else{
if(elemWidth 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 );



复制代码代码如下:

/*
機能: メーターヘッダーを修正しました。
コンテナの ID を使用して $("#div").chromatable({width: "100%", height: "100%",scrolling: "yes"})
table には < が含まれている必要があります; thead>label
パラメータ: なし。
*/
(function($){
$.chromatable = {
defaults: {
width: "900px", //展開するコンテナの幅を設定します
height : "300px", //拡張するコンテナの高さを設定します
scrolling: "yes" //はい、IE スクロール バーとともにスライドします。いいえはページ上で固定され、コンテナ スクロール バーのみがスライドします
}
} ;
$.fn.chromatable = function(options){
var options = $.extend({}, $.chromatable.defaults, options);
return this.each(function) () {
var $divObj = $(this);
var $tableObj = $divObj.find("テーブル");
var $uniqueID = $tableObj.attr("ID")ラッパー" );
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:" トップ "px;left:" left "px;' width='" $tableWidth "' border= '0 ' cellpacing ='0' cellpadding='0'>" $("#" $tableObj.attr("ID")).find("thead").html() " thead> ");

$.each($("#" $tableObj.attr("ID")).find("thead th") {
$("#" $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"),
}); {
var 要素 = $("#" uniqueID);
$(window).scroll(function(){
var top = $("#" tableId).offset().top;
var スクロール = $(this).scrollTop();

if (スクロール > トップ) {
if (window.XMLHttpRequest) {
element.css({
position) : " 固定" ,
トップ: 0
}); else {
element.css({
トップ: スクロール
}); }else {
element.css({
位置: "絶対",
トップ: トップ
});

function raiseEvent(tableId, uniqueID)
{
var 要素 = $("#" uniqueID);
$(window).resize(function(){
var top = $ (" #" tableId).offset().top;
var スクロール = $(this).scrollTop();
if (スクロール > トップ) {
if (window.XMLHttpRequest) {
element.css({
position: "固定",
top: 0
});
} else {
element.css({
top: スクロール)
} );
}
}else {
element.css({
位置: "絶対",
上: 最上位
}); 🎜> });
}
})(jQuery);

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
JavaScriptエンジンの理解:実装の詳細JavaScriptエンジンの理解:実装の詳細Apr 17, 2025 am 12:05 AM

JavaScriptエンジンが内部的にどのように機能するかを理解することは、開発者にとってより効率的なコードの作成とパフォーマンスのボトルネックと最適化戦略の理解に役立つためです。 1)エンジンのワークフローには、3つの段階が含まれます。解析、コンパイル、実行。 2)実行プロセス中、エンジンはインラインキャッシュや非表示クラスなどの動的最適化を実行します。 3)ベストプラクティスには、グローバル変数の避け、ループの最適化、constとletsの使用、閉鎖の過度の使用の回避が含まれます。

Python vs. JavaScript:学習曲線と使いやすさPython vs. JavaScript:学習曲線と使いやすさApr 16, 2025 am 12:12 AM

Pythonは、スムーズな学習曲線と簡潔な構文を備えた初心者により適しています。 JavaScriptは、急な学習曲線と柔軟な構文を備えたフロントエンド開発に適しています。 1。Python構文は直感的で、データサイエンスやバックエンド開発に適しています。 2。JavaScriptは柔軟で、フロントエンドおよびサーバー側のプログラミングで広く使用されています。

Python vs. JavaScript:コミュニティ、ライブラリ、リソースPython vs. JavaScript:コミュニティ、ライブラリ、リソースApr 15, 2025 am 12:16 AM

PythonとJavaScriptには、コミュニティ、ライブラリ、リソースの観点から、独自の利点と短所があります。 1)Pythonコミュニティはフレンドリーで初心者に適していますが、フロントエンドの開発リソースはJavaScriptほど豊富ではありません。 2)Pythonはデータサイエンスおよび機械学習ライブラリで強力ですが、JavaScriptはフロントエンド開発ライブラリとフレームワークで優れています。 3)どちらも豊富な学習リソースを持っていますが、Pythonは公式文書から始めるのに適していますが、JavaScriptはMDNWebDocsにより優れています。選択は、プロジェクトのニーズと個人的な関心に基づいている必要があります。

C/CからJavaScriptへ:すべてがどのように機能するかC/CからJavaScriptへ:すべてがどのように機能するかApr 14, 2025 am 12:05 AM

C/CからJavaScriptへのシフトには、動的なタイピング、ゴミ収集、非同期プログラミングへの適応が必要です。 1)C/Cは、手動メモリ管理を必要とする静的に型付けられた言語であり、JavaScriptは動的に型付けされ、ごみ収集が自動的に処理されます。 2)C/Cはマシンコードにコンパイルする必要がありますが、JavaScriptは解釈言語です。 3)JavaScriptは、閉鎖、プロトタイプチェーン、約束などの概念を導入します。これにより、柔軟性と非同期プログラミング機能が向上します。

JavaScriptエンジン:実装の比較JavaScriptエンジン:実装の比較Apr 13, 2025 am 12:05 AM

さまざまなJavaScriptエンジンは、各エンジンの実装原則と最適化戦略が異なるため、JavaScriptコードを解析および実行するときに異なる効果をもたらします。 1。語彙分析:ソースコードを語彙ユニットに変換します。 2。文法分析:抽象的な構文ツリーを生成します。 3。最適化とコンパイル:JITコンパイラを介してマシンコードを生成します。 4。実行:マシンコードを実行します。 V8エンジンはインスタントコンピレーションと非表示クラスを通じて最適化され、Spidermonkeyはタイプ推論システムを使用して、同じコードで異なるパフォーマンスパフォーマンスをもたらします。

ブラウザを超えて:現実世界のJavaScriptブラウザを超えて:現実世界のJavaScriptApr 12, 2025 am 12:06 AM

現実世界におけるJavaScriptのアプリケーションには、サーバー側のプログラミング、モバイルアプリケーション開発、モノのインターネット制御が含まれます。 2。モバイルアプリケーションの開発は、ReactNativeを通じて実行され、クロスプラットフォームの展開をサポートします。 3.ハードウェアの相互作用に適したJohnny-Fiveライブラリを介したIoTデバイス制御に使用されます。

next.jsを使用してマルチテナントSaaSアプリケーションを構築する(バックエンド統合)next.jsを使用してマルチテナントSaaSアプリケーションを構築する(バックエンド統合)Apr 11, 2025 am 08:23 AM

私はあなたの日常的な技術ツールを使用して機能的なマルチテナントSaaSアプリケーション(EDTECHアプリ)を作成しましたが、あなたは同じことをすることができます。 まず、マルチテナントSaaSアプリケーションとは何ですか? マルチテナントSaaSアプリケーションを使用すると、Singの複数の顧客にサービスを提供できます

next.jsを使用してマルチテナントSaaSアプリケーションを構築する方法(フロントエンド統合)next.jsを使用してマルチテナントSaaSアプリケーションを構築する方法(フロントエンド統合)Apr 11, 2025 am 08:22 AM

この記事では、許可によって保護されたバックエンドとのフロントエンド統合を示し、next.jsを使用して機能的なedtech SaaSアプリケーションを構築します。 FrontEndはユーザーのアクセス許可を取得してUIの可視性を制御し、APIリクエストがロールベースに付着することを保証します

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

EditPlus 中国語クラック版

EditPlus 中国語クラック版

サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター