以前から作成していた擬似フレームページ (frame-like pages, Cssframe)を、フレームを使わずに、スタイルシート (CSS)とJavaScriptライブラリであるjQueryを使用して実現する方法の紹介します。
今回は、その機能追加版です。
jQueryを使った基本的な擬似フレームで基本的な解説をしています。まずはそちらからご覧ください。
今回正式に追加した機能は以下の通りです。
- 左側にあるメニューのサイズ(横幅)を変更できる機能を追加しました(メニューのリサイズ)。
"jQuery UI resizable"を使用しています。 - 擬似フレームを無効化、有効化をする機能を追加しました。
- 擬似フレーム有効時は印刷した際に表示が不正となるので、印刷専用画面へのリンクを出力する機能を追加しました。
以下にファイルと、簡単な解説を添えます。
詳しくはスクリプトファイルのコメントを参照してください。
# ダウンロード
# メニューのリサイズについて
マウスオーバー時、メニュー部分の右側(縦スクロールバーが表示される場合は、その左側)にドラッグできる領域が追加されます。
$(CSF.resizerId).resizable({ handles: "e", autoHide: true, alsoResize : CSF.menuId, resize: function(){//Content in the resize operation //get the inside dimension of the browser CSF.browserWidth = $('body').outerWidth(true); CSF.browserHeight = $('body').outerHeight(true); //get the "menu" width when this function is called because it can be resized. CSF.menuWidth = $(CSF.menuId).outerWidth(true); //change the width of "main" element, and its left position. $(CSF.mainId).width(CSF.browserWidth-CSF.menuWidth).css("left",CSF.menuWidth); } });
# 擬似フレームの切り替えについて
擬似フレームの有効・無効を切り替える機能を追加しました。
指定のIDに有効・無効のクリックイベントを追加します。
ただし、インターネットエクスプローラー(IE)は不正な動きとなるため、動的な切り替えではなく、画面の再読込とクッキーを組み合わせた方法を採っています。
詳しくは、スクリプトファイルとそこに記述したコメントを参照ください。
"CSF.csfRemoverId"で設定したIDをもつ要素に無効化イベント、"CSF.csfStarterId"で設定したIDをもつ要素に有効化イベントが設定されます。
$(CSF.csfRemoverId).click(function(){ if($(CSF.targetRisizeBar).size() > 0){ //IE6-8 behaves improperly so in IE this function sets required values to the cookie and figures a screen again. var exp = new Date(); exp.setMonth(exp.getMonth() + 2); CSF.setCookie('csf', '0', exp, undefined, undefined); if(jQuery.support.opacity){ $(CSF.resizerId).resizable('destroy').removeAttr('style'); $(CSF.headerId).removeAttr('style'); $(CSF.mainId).removeAttr('style'); $(CSF.footerId).removeAttr('style'); $(CSF.menuId).removeAttr('style'); $(CSF.targetRisizeBar).remove(); $('body').removeAttr('style'); $('html').removeAttr('style'); if (typeof removeFunc == 'function'){ removeFunc(); } $(this).unbind(); } else { location.reload(); } } }); $(CSF.csfStarterId).click(function(){ if($(CSF.targetRisizeBar).size() < 1){ var exp = new Date(); exp.setMonth(exp.getMonth() + 2); CSF.setCookie('csf', '1', exp, undefined, undefined); CSF.main(restartFunc,removeFunc); if (typeof restartFunc == 'function'){ restartFunc(); } } });
# 印刷専用画面について
擬似フレームをそのまま印刷しようとすると、画面表示が崩れます。
印刷用画面を出力する(というよりも、一時的に擬似フレームを無効化した画面を出力する、ですが…)リンクを自動生成します。
"CSF.csfPrintCls"で設定したクラスを持つ要素に出力されます。
例えば、"<span class="cframe-print">Print Page</span>"などです。
if ($(CSF.csfPrintCls).size() > 0){ var printString = $(CSF.csfPrintCls).html(); if(!(printString)){ printString = 'Print Page'; } if (location.search){ $(CSF.csfPrintCls).html( '<a href="' + location.pathname + location.search + '&cflame=print" target="_blank">' + printString + '</a>' ); }else{ $(CSF.csfPrintCls).html( '<a href="' + location.pathname + '?cflame=print" target="_blank">' + printString + '</a>' ); } }
実際に動作している例としては、擬似フレームサンプル(http://labo.ek-pro.com/exp/2011-05-01/csf-rich/)を参照してください。
# Related Page(s)
タグ:JavaScript