画像ではなく、テキスト要素をライトボックス風に表示する方法のメモ。
HTML 抜粋
- ・・・省略・・・
- <div class="cd">
- <h3>ジャズ Vol.1 ~Let’s Swing~</h3>
- <p>Released:2012 <a class="detail_btn" href="#">(詳細)</a></p>
- <div class="detail_info">
- <h3>ジャズ Vol.1 ~Let’s Swing~</h3>
- <p>誰もが楽しめるジャズシリーズ第一弾!</p>
- <dl>
- <dt><曲目></dt>
- <dd>
- <ol>
- <li>A列車で行こう</li>
- <li>ペーパー・ムーン</li>
- <li>シング・シング・シング</li>
- </ol>
- </dd>
- </dl>
- </div><!-- end of .detail_info -->
- </div><!-- end of .cd -->
- ・・・省略・・・
- <div id="graylayer"></div>
- <div id="overlayer">
- <img src="images/close-trans.png" class="close" title="閉じる" />
- <div class="detail_info"></div>
- <p><a class="close_btn" href="#">(X 閉じる)</a></p>
- </div>
CSS
- #graylayer {
- display: none;
- position: fixed;
- left: 0;
- top: 0;
- height: 100%;
- width: 100%;
- background: #444;
- filter:alpha(opacity=75);
- opacity: 0.75;
- z-index: 200;
- }
- * html #graylayer {
- position: absolute;
- }
- #overlayer {
- display: none;
- width: 80%;
- background: #FFF;
- padding: 10px;
- position: fixed;
- top: 50%;
- left: 50%;
- z-index: 300;
- height: 90%;
- overflow: scroll;
- }
- * html #overlayer {
- position: absolute;
- }
- #overlayer img.close {
- position: absolute;
- top: 0;
- right: 0;
- cursor: pointer;
- }
JavaScript
- jQuery(function($){
- $('.cd a.detail_btn').click(function(){
- var that = $(this);
- $('#graylayer').fadeIn();
- $('#overlayer').fadeIn().find('div.detail_info').html(that.closest('div.cd').find('div.detail_info').html());
- $('#overlayer').css({
- marginTop: "-" + $('#overlayer').height()/2 + "px",
- marginLeft: "-" + $('#overlayer').width()/2 + "px"
- });
- return false;
- });
- $('#overlayer img.close, #overlayer a.close_btn, #graylayer').click(function(){
- $('#graylayer').fadeOut();
- $('#overlayer').fadeOut();
- return false;
- });
- });
- <div id="graylayer"></div>
- <div id="overlayer">
- <img src="images/close-trans.png" class="close" title="閉じる" />
- <p><a class="close_btn" href="#">(X 閉じる)</a></p>
- </div>
- jQuery(function($){
- $('body').append('<div id="graylayer"></div><div id="overlayer"></div>');
- $('#graylayer').click(function(){
- $(this).fadeOut();
- $('#overlayer').fadeOut();
- });
- $('.cd a.detail_btn').click(function(){
- $('#graylayer').fadeIn();
- $('#overlayer').fadeIn().html('<img src="images/close-trans.png" class="close" title="閉じる" />' + $(this).closest('div.cd').find('div.detail_info').html() + '<p><a class="close_btn" href="#">(X 閉じる)</a></p>').css({
- marginTop: "-" + $('#overlayer').height()/2 + "px",
- marginLeft: "-" + $('#overlayer').width()/2 + "px"
- });
- $('#overlayer img.close, #overlayer a.close_btn').click(function(){
- $('#graylayer').fadeOut();
- $('#overlayer').fadeOut();
- });
- return false;
- });
- });
「閉じる」ボタンなどの要素をスクリプトで追加する場合、それらの要素はページが読み込まれた時点では認識されていないので、前述のようにクリックのイベント処理の内部に「閉じる」ボタンをクリックした時の処理を記述したが、「on」を使えば以下のように記述可能。
- jQuery(function($){
- $('body').append('<div id="graylayer"></div><div id="overlayer"></div>');
- $('#graylayer').click(function(){
- $(this).fadeOut();
- $('#overlayer').fadeOut();
- });
- $('.cd a.detail_btn').click(function(){
- $('#graylayer').fadeIn();
- $('#overlayer').fadeIn().html('<img src="images/close-trans.png" class="close" title="閉じる" />' + $(this).closest('div.cd').find('div.detail_info').html() + '<p><a class="close_btn" href="#">(X 閉じる)</a></p>').css({
- marginTop: "-" + $('#overlayer').height()/2 + "px",
- marginLeft: "-" + $('#overlayer').width()/2 + "px"
- });
- return false;
- });
- $(document).on('click', '#overlayer img.close, #overlayer a.close_btn', function() {
- $('#graylayer').fadeOut();
- $('#overlayer').fadeOut();
- return false;
- });
- });
クリックするリンクの href 属性を「#」にしている場合で、モーダルウィンドウを表示する処理を関数にする場合、関数の側で「return false;」を記述してもモーダルウィンドウが表示される段階ではそれが機能しないので、呼び出す側に「return false;」を記述する。
例えば、前述の以下の部分を関数にまとめる場合
- $('body').append('<div id="graylayer"></div><div id="overlayer"></div>');
- $('.cd a.detail_btn').click(function(){
- $('#graylayer').fadeIn();
- $('#overlayer').fadeIn().html('<img src="images/close-trans.png" class="close" title="閉じる" />' + $(this).closest('div.cd').find('div.detail_info').html() + '<p><a class="close_btn" href="#">(X 閉じる)</a></p>').css({
- marginTop: "-" + $('#overlayer').height()/2 + "px",
- marginLeft: "-" + $('#overlayer').width()/2 + "px"
- });
- return false;
- });
show_modal_window(target) という関数にする際に、「return false;」は呼び出し側に記述する。
そうしない場合、モーダルウィンドウを開く(閉じる)たびに、ページの先頭(#)に移動してしまう。
- $('body').append('<div id="graylayer"></div><div id="overlayer"></div>');
- function show_modal_window(target) {
- $('#graylayer').fadeIn();
- $('#overlayer').fadeIn().html('<img src="images/close-trans.png" class="close" title="閉じる" />' + target + '<p><a class="close_btn" href="#">(X 閉じる)</a></p>').css({
- marginTop: "-" + $('#overlayer').height()/2 + "px",
- marginLeft: "-" + $('#overlayer').width()/2 + "px"
- });
- //return false; ここに記述しても効果はない
- }
- $('.cd a.detail_btn').click(function(){
- show_modal_window($(this).closest('div.cd').find('div.detail_info').html());
- return false; //ここに記述
- });