ここの構文は、href 属性で指定された外部ページの標準的なHTMLです。 これは、クライアントがJavaScriptをサポートしていない場合でも、外部ページは 見ることができることが保証されます。JavaScriptの世界では、これを "プログレッシブ·エンハンスメント"と呼んでいます。実際のコンテンツがロードされる オーバレイの内部に、特殊な wrapper タグを使用していることに注意してください:
<!-- 外部ページはhref属性で指定する --> <a href="external-content.htm" rel="#overlay" style="text-decoration:none"> <!-- remember that you can use any element inside the trigger --> <button type="button">Show external page in overlay</button> </a> <!-- 他方のリンク。同じオーバレイを使用 --> <a href="external-content2.htm" rel="#overlay" style="text-decoration:none"> <button type="button">Show another page</button> </a> <!-- オーバレイ要素 --> <div class="apple_overlay" id="overlay"> <!-- 外部コンテンツは、このタグ内にロードされる --> <div class="contentWrap"></div> </div>
オーバレイ・コンストラクタへの最初の引数として直接指定することができる、 onBeforeLoad イベントでローディングされます。このイベントは、 ラッパー要素内に外部コンテンツをロードします。イベント関数内で、this 変数は、オーバレイAPIへのポインタです。
$(function() {
// オーバレイに関数の引数が指定されている場合、
// それは onBeforeLoad イベントリスナと見なされる
$("a[rel]").overlay({
mask: 'darkred',
effect: 'apple',
onBeforeLoad: function() {
// コンテンツ内のラッパー要素を獲得
var wrap = this.getOverlay().find(".contentWrap");
// トリガーで指定されたページを読み込む
wrap.load(this.getTrigger().attr("href"));
}
});
});
注:単に外部ページをロードしたいだけであれば、 オーバレイを初めて開く時に、if (wrap.is(":empty")) ステートメント内部の load コールをラップすることができます。 その場合には、同じオーバレイを使用して別のURLを開く複数のトリガを持つ ことはできません。
CSSファイル overlay-apple.css を継続して 使用しますが、次のCSSの設定でそれを上書きします。 今回は、オーバレイに半透明な背景画像を使用しました。これはCSSで変更することができます。 さらに、必要な場合のみ表示されるように、コンテンツへスクロール・バーを使用しました (小さなコンテンツにスクロール・バーは出現しません)。 ロードするページの大きさが分からなければ、これは手軽な策です。
/* オーバレイに半透明な画像を使用 */
#overlay {
background-image:url(/media/img/overlay/transparent.png);
color:#efefef;
height:450px;
}
/* 外部コンテンツのコンテナ。必要なら縦スクロールバーを使用する */
div.contentWrap {
height:441px;
overflow-y:auto;
}