home > Webデザイン > JavaScript > 画像もHTMLもオーバーレイ表示 - ...
画像もHTMLもオーバーレイ表示 - ThickBox 3
- 2008年2月 1日 12:50
- JavaScript
2008-02-27 説明を詳しくしました。
画像やHTMLをオーバーレイで表示するAjaxライブラリ、ThickBox 3.1を導入しました。導入方法は【ハウツー】ゼロからはじめるThickBox 3 - 画像もHTMLファイルもスイスイ表示(マイコミジャーナル)を見れば問題なく導入できると思いますが、ここでも素人なりに丁寧に手順を載せておきます。
まず簡単なサンプル作ったので見てやってください。
ThickBoxライブラリのダウンロード
はじめにThickBox 3.1へアクセスします。
![]()
画面を少し下へ移動したところの「Download」のタブの中の、次の4つのリンクを右クリックしてファイルをダウンロードして保存します。このとき、「jQuery JavaScript library」については名前を「jquery-latest.js」から「jquery.js」に変えて保存しましょう。その他のファイル名は変更しなくてOKです。
- thickbox.js
- ThickBox.css
- loadingAnimation.gif
- jQuery JavaScript library
ThickBoxライブラリのアップロード
ダウンロードしたファイルをサイトにアップロードします。
今回はサイトパス(サイトのURL)の直下に「thickbox」というフォルダを作り、その中に次の3つのファイルをアップロードします。
- jquery.js
- thickbox.js
- thickbox.css
続いてthickboxフォルダの中に「images」というフォルダを作り、その中に「loadingAnimation.gif」をアップロードします。

他のサイトでは、javascriptファイルはjsフォルダ、CSSファイルはCSSフォルダ、画像はimageフォルダと整理して入れているパターンが多いと思いますが、僕は日々改良したくなるブログでは、使用しているライブラリをいつ変更するかわからないので、まとめて一つのフォルダの中に入れるようにしています。複数のライブラリを使用する場合にはjquery.jsなどがダブルことにもなりますが、ある意味実験的なサイトなので削除が楽な方が良いという判断です。
ちなみに、2008-02-01 現在、当ブログではMovable typeをインストールしているフォルダの外に「library」というフォルダを作り、その中に「ThickBox 3」や「dp.SyntaxHighlighter」をまとめて入れています。tinybeans.net下の他のサイトでも使うかもしれないので。

ThickBoxライブラリの読み込み
ThickBoxを搭載したいサイトのheader要素内に次のコードを追加します。ちなみに上記の理由から、javascriptやCSSを読み込むコードを他のそれらを読み込むコードと一緒にせずにコメントでくくってまとめています。
なお、以下のソースコードの例をあげますが、「@」で囲っている部分やリンクするファイルまでのパス、alt属性などを適宜書き換えてください。
<!-- ThickBox 3 -->
<script type="text/javascript" src="@PATH@/thickbox/jquery.js"></script>
<script type="text/javascript" src="@PATH@/thickbox/thickbox.js"></script>
<link rel="stylesheet" href="@PATH@/thickbox/thickbox.css" type="text/css" media="all" />
<!-- /ThickBox 3 -->
さて、これで準備は完了です。
ThickBoxを使う時に追加する属性
さて、実際にThickBoxを使うには、画像やHTMLページへリンクするときに、次のような属性を追加すればOKです。
共通事項
a要素に次の属性を追加します。
- class="thickbox"
- title="タイトルや説明文" →入れなくてもOKです。以下の例では「@CAPTION OR TITLE@」部分を書き換えてください。
1枚の画像を表示
対応ファイル形式は.jpg .jpeg .png .gif .bmpです。
<a href="images/single.jpg" title="@CAPTION OR TITLE@" class="thickbox"><img src="images/single_t.jpg" alt="Single Image"/></a>
複数の画像をグループ表示
4つのファイルを1つのグループで表示する場合の例です。対応ファイル形式は.jpg .jpeg .png .gif .bmpです。
「@GROUP@」にグループ名を入れます。
<a href="images/plant1.jpg" title="@CAPTION OR TITLE@" class="thickbox" rel="@GROUP@"><img src="images/plant1_t.jpg" alt="Plant 1" /></a>
<a href="images/plant2.jpg" title="@CAPTION OR TITLE@" class="thickbox" rel="@GROUP@"><img src="images/plant2_t.jpg" alt="Plant 2" /></a>
<a href="images/plant3.jpg" title="@CAPTION OR TITLE@" class="thickbox" rel="@GROUP@"><img src="images/plant3_t.jpg" alt="Plant 3" /></a>
<a href="images/plant4.jpg" title="@CAPTION OR TITLE@" class="thickbox" rel="@GROUP@"><img src="images/plant4_t.jpg" alt="Plant 4" /></a>
ページ内のコンテンツを表示
「@***@」に数値を、「@ID@」に表示させたい部分のid属性を入れます。
<a href="#TB_inline?height=@***@&width=@***@&inlineId=@ID@" class="thickbox">EXAMPLE</a>
なお、CSSの「display:none;」で隠されているコンテンツを表示することもできます。
また、hrefの最後に&modal=trueを加えることで、オーバーレイ表示されたThickBoxを閉じる機能を停止することができるようです。これは、文章を読ませて「OK」なりを押さないと閉じることができないような提供の仕方が考えられます。
この&modal=trueは以下のインラインフレームの場合やAjaxの場合も同様です。そちらの形式であれば、phpファイルなどを読み込んでログイン画面などを表示させるときに使うことが考えられます。
<a href="#TB_inline?height=@***@&width=@***@&inlineId=@ID@&modal=true" class="thickbox">EXAMPLE</a>
ただし、このままだとオーバーレイ表示されたコンテンツを閉じることができないので、非表示コンテンツの最後に次の閉じるボタンを追加します。この辺は僕は詳しく分かりません。
<input type="submit" value="close" onclick="tb_remove()" />
インラインフレームで他のページを表示
このパターンを使用すると、同一ドメインでも他のドメイン上のページでも表示することができます。
「@URL@」に表示させたいページのURLを、「@***@」に数値を入れます。
<a href="@URL@?keepThis=true&TB_iframe=true&height=@***@&width=@***@" title="@CAPTION OR TITLE@" class="thickbox">EXAMPLE</a>
&modal=trueを加えることで、オーバーレイ表示されたThickBoxを閉じる機能を停止することができるようです。
<a href="@URL@?placeValuesBeforeTB_=savedValues&TB_iframe=true&height=@***@&width=@***@&modal=true" title="@CAPTION OR TITLE@" class="thickbox">EXAMPLE</a>
Ajaxコンテンツなどを表示
こちらはやや面倒なのでThickBox 3.1やゼロからはじめるThickBox 3 - 画像もHTMLファイルもスイスイ表示 - 5 他のページを表示するを参照してください。僕はインラインフレームのパターンで代用できるので、こちらは使ったことがありません。
サンプルについては、ThickBox 3.1のメニューからExamplesからご覧になれます。
その他
これまでは(他のブログで)Lightbox 2を使っていたので、このブログでは動作の軽いThickboxにしてみました。
画像表示に関しては、どちらが良いとかではなくそれぞれ一長一短ある、というか好みの問題でしょうか。。例えば大きな画像を表示させた時、Lightboxはスクロールして見る、ThickBoxは自動的に縮小されるといった違いもあるし、Lightboxはきれいだけどなれるとうっとうしい、Thickboxは軽いけどシンプルすぎるなど。。でも最大の違いは画像以外が表示できるか否かというところでしょうか。
ちなみに、ウィンドウサイズを検知して自動的に縮小する機能を解除する方法が以下に載っています。
なお、マイコミジャーナルの記事の6ページ目(角丸で表示する)で、Firefoxで先行実装されているCSS3のプロパティを利用して、背景画像を角丸にする方法が紹介されていますが、これはSafari 3でも可能です。thickbox.cssに以下を加えればOKです。
#TB_window {
-moz-border-radius:15px;
-webkit-border-radius: 15px;
}
TrackBack [0]
- TrackBack URL
- Link to this Entry



はじめましてのりこです。
何も分からずこのサイトを読んで、オーバーレイ表示 - ThickBox 3を使ってみました。
画像を読み込むときに、
loadingAnimation.gif が表示されません。
http://www17.plala.or.jp/noriko-k/
ページの泉慶さんスイーツやロビー・ラウンジの画像部分です。
imageフォルダを作り、loadingAnimation.gifを入れてあります。
よろしくお願いします。
のりこさん、コメントありがとうございます。
一番簡単は方法は、thickbox.jsから8行目あたりの、
var tb_pathToImage = "images/loadingAnimation.gif";
を、
var tb_pathToImage = "http://www17.plala.or.jp/noriko-k/thickbox/images/loadingAnimation.gif";
もしくは、
var tb_pathToImage = "/noriko-k/thickbox/images/loadingAnimation.gif";
に変えれば表示されると思いますよ。
tinybeansさん、分かりやすいご説明ありがとうございました。
thickbox.jsを修正しました。
イメージ画像が表示されてすっきりしました。
http://www17.plala.or.jp/noriko-k/
yuga.js もチャレンジしているのですが、
使いこなすのはなかなか難しいですね。
こんにちは!
質問があります。
embedで、mp4動画を貼っているサイトで、ThickBox 3を使い
画像をポップアップした時に、mp4動画だけオーバーレイがかからず
ポップアップした画像よりも上に表示されて困っています。
(swfなどのflashムービーの場合は大丈夫です)
回避方法などご存知でしたらご教授いただけると助かります。
よろしくお願いいたします。
まなさん、こんにちは。
いっそのこと、Thickboxを起動したときに、ポップアップよりも上にきてしまう要素を非表示にしてはどうでしょう? 例えば、thickbox.js を読み込んだ後に、
$(function(){
$('.thickbox').click(function(){
$('embed').css('visibility','hidden');
});
$('#TB_overlay, #TB_window').click(function(){
$('embed').css('visibility','visible');
});
});
と書いてみたらいかがでしょうか? 動作テストはしていませんがお試しください。
まなさん、ごめんなさい。ひょっとしたらさっきのだとイベントが上書きされちゃってダメかもしれないです。
thickbox.js内の tb_show と tb_remove に、先ほどの表示・非表示の設定を書き加えたらいいかもしれません。
tinybeansさん、とても親切なアドバイスありがとうございます!
function tb_show(caption, url, imageGroup)
以下に
$('embed').css('visibility','hidden');
function tb_remove() {
以下に
$('embed').css('visibility','visible');
を追記したところうまくいきました!
ずうずうしくも、、もうひとつご質問させてください。
再び表示させるタイミングですが、クリック後ではなく、
オーバーレイ終了後に、というのは設定可能でしょうか?
よろしくお願いいたします。
おー、うまくいって良かったです。
>再び表示させるタイミングですが、クリック後ではなく、オーバーレイ終了後に、というのは設定可能でしょうか?
あれ? オーバーレイ終了後=クリック後ではないですか? その実際のページを教えていただけると助かるのですが。
tinybeanさま
>あれ? オーバーレイ終了後=クリック後ではないですか?
あっ、スミマセン、書き方が悪かったです。
フェードアウト終了後、という意味でした。
実際のページは、まだUPしていないので、
また後ほどご連絡いたしますね。
まなさん、こんにちは。
フォードアウト終了後ということでしたら、次のように変更してみてはいかがでしょうか?
【変更前】
function tb_remove() {
略
$("#TB_window").fadeOut("fast",function(){$('#TB_window,#TB_overlay,#TB_HideSelect').trigger("unload").unbind().remove();});
略
}
【変更後】
function tb_remove() {
略
$("#TB_window").fadeOut("fast",
function(){
$('#TB_window,#TB_overlay,#TB_HideSelect').trigger("unload").unbind().remove();
$('embed').css('visibility','visible');
}
);
略
}
これで、$('embed').css('visibility','visible');がフェードアウト後に実行されるはずです。テストしてませんが、お試しください。