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

固定ヘッダー (jquery を使用した実装原理の紹介)_jquery

May 16, 2016 pm 05:48 PM
修理済み ヘッダ

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

私の目的は、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 <= 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 );



复制代码代码如下:

/*
機能: メーターヘッダーを修正しました。
コンテナの 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() " < /table>");

$.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 までご連絡ください。

ホット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ヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

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

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

変更されないコンピューターのロック画面の壁紙を設定する方法 変更されないコンピューターのロック画面の壁紙を設定する方法 Jan 17, 2024 pm 03:24 PM

一般的に、コンピュータのデスクトップの背景パターンはユーザーが調整できます。ただし、一部の Windows 10 ユーザーは、コンピューターのデスクトップの背景画像を修正したいと考えていますが、その設定方法がわかりません。実際、操作は非常にシンプルで簡単です。コンピューターのロック画面の壁紙を変更せずに修正する方法 1. 設定する画像を右クリックし、[背景画像として設定] を選択します。 2. Win+R を押して開いて実行し、「gpedit.msc」と入力します。 3. 以下を展開します。ユーザー構成 - 管理テンプレート - コントロール パネル - 個人用設定 4. [個人用設定] をクリックし、[デスクトップの背景への変更を防止する] を選択します 5. [有効] を選択します 6. 次に、設定を開いて背景に入ります。が設定されています。

VirtualBox 固定ディスクをダイナミック ディスクに、またはその逆に変換します VirtualBox 固定ディスクをダイナミック ディスクに、またはその逆に変換します Mar 25, 2024 am 09:36 AM

仮想マシンを作成するときに、ディスクの種類を選択するように求められます。固定ディスクまたはダイナミック ディスクを選択できます。固定ディスクを選択した後でダイナミック ディスクが必要であることに気付いた場合、またはその逆の場合はどうすればよいでしょうか? いいですね!一方をもう一方に変換できます。この記事では、VirtualBox 固定ディスクをダイナミック ディスクに、またはその逆に変換する方法を説明します。ダイナミック ディスクは、最初は小さいサイズですが、仮想マシンにデータを保存するにつれてサイズが大きくなる仮想ハード ディスクです。ダイナミック ディスクは、必要なだけのホスト ストレージ スペースのみを使用するため、ストレージ スペースを節約するのに非常に効率的です。ただし、ディスク容量が増加すると、コンピュータのパフォーマンスがわずかに影響を受ける可能性があります。仮想マシンでは固定ディスクとダイナミック ディスクが一般的に使用されます

Windows 11 でウィジェット パネルを常に表示しておく方法 Windows 11 でウィジェット パネルを常に表示しておく方法 Aug 13, 2023 pm 07:13 PM

Windows 11で開くときにウィジェットボードを常に表示するにはどうすればよいですか?まず、最新の Windows 更新プログラムをダウンロードしてインストールします。 Microsoft は、Insider Program の最新の更新パッチで、開発チャネルとカナリア チャネルのユーザーがウィジェット ボードを開いた状態で固定できるようになり、いつでも一目で見えるようにできることを明らかにしました。 Windows 11 でボードが開いているウィジェットを常に表示する方法 Microsoft によると、ボードを固定して開くには、ボードの右上隅にある画鋲アイコンをクリックするだけです。ボードが開いた状態で固定されると、ウィジェット ボードは閉じることを無視しなくなります。ボードが固定されている間でも、タスクバーの [ウィジェット] ボタンからウィジェット ボードを開いてボードを閉じることができます。いつウィジェット

コンピューターのメモをデスクトップに固定する方法 コンピューターのメモをデスクトップに固定する方法 Feb 15, 2024 pm 04:00 PM

Windows 10 オペレーティング システムには便利なメモ機能があらかじめ組み込まれているため、大切なユーザーが必要に応じて一時的なメモやメッセージを書き込むことができます。付箋をすばやく簡単に見つけて使用するためのツールとしてこれを使用したい、またはこの実用的な小さなプログラムを大きな画面の中央に固定して参照しやすいようにしたいとします。手順: コンピュータに付箋を固定する方法 デスクトップ上 1. [スタート] をクリックし、ここの付箋をクリックします 2. 付箋を開いた後、ここに対応する内容を直接入力することもできますし、プラス記号をクリックすることもできます3. サードパーティを使用する場合 メモ作成ソフトウェアをお持ちの場合は、対応するソフトウェアの設定を入力して動作させることができます。

win11のスタートメニューが直らない問題の解決方法 win11のスタートメニューが直らない問題の解決方法 Jan 06, 2024 pm 08:09 PM

多くの友人は、スタート メニューでソフトウェアを直接開くことを好みますが、そのためにはアプリケーションを直接ピン留めする必要があります。しかし、win11 ではスタート メニューにソフトウェアをピン留めできないことがわかりました。これは、私たちのやり方が間違っていた可能性があります。以下の正しい方法を参照してください。 win11のスタートメニューが修正できない場合の対処法 1. まず、下のタスクバーにある検索ボタンをクリックします。 2. 開いた後、上部で固定したいアプリケーションを検索し、見つかったら、右側の「スタート画面に固定する」をクリックします 3. システムがアイコンを固定するプロンプトを表示するまで待ちます。 4. 完了後、選択したプログラムがスタート メニューに固定されていることがわかります。

Vue ナビゲーション バーの修正された問題の解決策 Vue ナビゲーション バーの修正された問題の解決策 Jun 30, 2023 am 10:52 AM

Vue 開発で発生した固定ナビゲーション バーの問題に対処する方法 Web ページを開発する場合、ナビゲーション バーの固定効果は非常に一般的な要件です。ユーザーがページをスクロールするとき、ナビゲーション バーは固定位置に留まるため、ユーザーはページの他の部分に簡単にアクセスできます。ただし、Vue 開発では、その特殊な単一ページ アプリケーション構造により、ナビゲーション バーの修正の問題は若干異なる場合があります。この記事では、Vue 開発で遭遇するナビゲーション バーの修正問題に対処する方法をいくつか紹介します。方法 1: CSS を使用して位置を固定する (位置

HTML の固定位置の制限と理由の分析 HTML の固定位置の制限と理由の分析 Dec 28, 2023 am 08:20 AM

HTML における固定位置の制限と理由の分析 Web 開発では、固定位置 (position:fixed) が一般的に使用されるレイアウト方法であり、要素をビューポートに対して固定し、他の要素の位置の変更の影響を受けないようにすることができます。 。ただし、固定位置決めには特有の制限もあります。これについては、対応するコード例とともに以下で詳しく説明します。ブラウザの互換性の影響: ブラウザごとに固定位置のサポート レベルが異なり、一部の古いバージョンのブラウザでは固定位置を正しく解析できない場合があります。

適切かつ効率的な固定測位アーキテクチャを選択する方法 適切かつ効率的な固定測位アーキテクチャを選択する方法 Dec 28, 2023 pm 01:27 PM

適切な高速固定位置決め構造を選択するには、具体的なコード例が必要ですが、現代のソフトウェア開発において、高速固定位置決めは非常に重要な機能です。 Web デザイン、モバイル アプリ開発、組み込みシステムのいずれであっても、操作する必要がある要素やオブジェクトを正確に特定できる必要があります。優れた固定配置構造は、開発効率を向上させるだけでなく、ユーザー エクスペリエンスも向上します。この記事では、適切な高速固定位置決め構造を選択する方法を説明し、具体的なコード例を示します。まず、高速固定測位の定義を明確にする必要があります。クイックフィックス

See all articles