JavaScript 行列を固定したテーブル
ナビゲーションに移動
検索に移動
目次
JavaScript 行列を固定したテーブル
jQueryが出てきてから、すごく楽になった。。。 ↓こんなことしなくても、jQueryプラグイン使えばよい。
インラインフレーム等を使わずに、行列を固定したテーブルを実現
テンプレート:Ref scroll table sample.lzh
画面のリサイズ対応
HTML
- <body onresize="resizePanel();" ・・・
- <div id="HEADER_PANEL" style="overflow:hidden;">
- <table styel="table-layout:fixed;" ・・・
- </div>
- <div id="ITEM_PANEL" style="overflow:hidden;">
- <table style="overflow:auto;" ・・・
- </div>
- :
JavaSctript
- /**
- * 画面のサイズ変更から呼び出す
- */
- function resizePanel() {
- resizeTablePanel(
- 80
- , 30
- ,document.getElementById("HEADER_PANEL")
- ,document.getElementById("ITEM_PANEL")
- );
- }
- /**
- /* @param Description : 画面のサイズに合わせて、サイズを変更するテーブル
- /* @param Arguments :
- /* @param verticalMargin : 垂直マージン
- /* @param horizontalMargin : 水平マージン
- /* @param headerPanel : テーブルヘッダーパネル(DIV)
- /* @param itemPanel : テーブルアイテムパネル(DIV)
- /* @param containerHeight : 基準となるコンテナの高さ(省略時、BODYタグのクライアント領域高さ)
- /* @param containerWidth : 基準となるコンテナの幅(省略時、BODYタグのクライアント領域幅)
- */
- function resizeTablePanel( verticalMargin, horizontalMargin, headerPanel, itemPanel
- , containerHeight /* document.body.clientHegith */
- , containerWidth /* document.body.clientWidth */ ) {
- // 規定値の設定
- if (containerHeight == undefined) containerHeight = document.body.clientHeight; // コンテナ高さ
- if (containerWidth == undefined) containerWidth = document.body.clientWidth; // コンテナ幅
- var SCROLL_BAR_MARGIN = 17; // スクロールバー幅 規定値
- var isVerticalScrollBar = false; // 垂直スクロールバーが表示されるか
- var scrollBarMargin = 0; // 垂直スクロールバーマージン
- // テーブル幅が変わらない設定(overflow-y:auto or overflow-y:scroll)
- var isFixWidth = itemPanel.style.overflowY == 'scroll'
- || itemPanel.style.overflowY == 'auto';
- // コンテナの高さが、指定マージンより大きければ、テーブル明細パネルの高さを変更する
- if (containerHeight > verticalMargin) {
- itemPanel.style.height = containerHeight - verticalMargin;
- }
- // 垂直スクロールバーが表示されるかを判定する
- var adjust = 16; // 調整(行が半分隠れている場合等正しく判定されないため)
- isVerticalScrollBar = (itemPanel.style.overflow == 'scroll') /* 常時表示 */
- || ((totalOffsetHeight(itemPanel)+adjust) >= itemPanel.offsetHeight) /* 子要素のほうが高い */
- // コンテナの幅が、指定マージンより大きければ、
- // テーブルヘッダーパネルおよびテーブル明細パネルの幅を変更する
- if (containerWidth > horizontalMargin) {
- itemPanel.style.width = containerWidth - horizontalMargin;
- // 垂直スクロールバー有無により、ヘッダーの幅を調整
- if (isVerticalScrollBar) {
- scrollBarMargin = SCROLL_BAR_MARGIN;
- }
- // テーブル幅固定の場合、ヘッダーリサイズしない
- if (!isFixWidth) {
- var headerMargin = (horizontalMargin + scrollBarMargin);
- var headerWidth = containerWidth - headerMargin;
- if (containerWidth <= headerMargin ) {
- headerWidth = 0;
- }
- headerPanel.style.width = headerWidth
- }
- }
- return;
- }
- /**
- /* @param Description : 指定されたオブジェクトの直接の子どもの高さの合計を取得
- /* @param Arguments :
- /* @param parent : 対象となる親オブジェクト
- */
- function totalOffsetHeight( parent ) {
- var children = parent.children;
- var h = 0;
- if (children == null) {
- return h;
- }
- for (var i=0; i<children.length; i++) {
- h += children[i].offsetHeight;
- }
- return h;
- }
テンプレート:Ref scrl tbl.jpg テンプレート:Ref scroll table sample.lzh テンプレート:Attach
{{include_html banner_html, "!Javascript"}}
© 2006 矢木浩人