オートページングでライトボックスが開かない

このQ&Aのポイント
  • オートページングを使用して大量の写真を表示していますが、ライトボックスが開きません。
  • jquery.masonry + infinitescroll を使用して写真を表示していますが、オートページングで読み込んだ写真をクリックすると画面遷移してしまいます。
  • thickbox.jsを入れることで写真をクリックした際にライトボックスを表示したいです。
回答を見る
  • ベストアンサー

オートページングだとライトボックスが開かない

大量の写真を表示するために、jquery.masonry + infinitescroll を使用しています。 http://masonry.desandro.com/demos/infinite-scroll.html 写真をクリックしたときにライトボックス風にページを表示できるよう↓このようにthickbox.jsを入れているのですが、 <a href="foophp?fileName=filename.png&keepThis=true&TB_iframe=true&height=500" title="" class="thickbox"><img src="filepath/filename.png" width="210" border="0" /></a> オートページングで読み込んできた部分は、写真をクリックしてもthickboxが開かずにそのまま画面が遷移してしまいます。 ■現在の状況 ・masonryで写真を敷き詰めるのはできています ・infinitescrollで、スクロールダウンしていくと自動的に次の写真を読み込んで敷き詰めます。これもできています。 ・最初に表示されるページ(オートページングではないページ)では、写真をクリックすればthickboxが開きます。 ・最初に表示されるページをスクロールダウンして自動的に読み込まれた写真達は、クリックするとthickboxではなく画面遷移します(ブラウザのアドレス欄がその画像のパスになってしまう) ■やってみたこと ・infinitescroll で <div id="container">~</div>を読み込むように指定しているので、2ページ目以降のファイルで、#container の中でthickbox.js, thickbox.cssを宣言してみました。 <div id="container"> <link rel="stylesheet" href="css/thickbox.css" type="text/css" media="all" /> <script type="text/javascript" src="js/thickbox.js"></script> <a href="foophp?fileName=filename.png&keepThis=true&TB_iframe=true&height=500" title="" class="thickbox"><img src="filepath/filename.png" width="210" border="0" /></a> </div> のようにcontainer内に表示してみましたが状況は変わらず、オートページングで読んだページでは写真をクリックしても画面遷移してしまいました。 ■解決したいこと オートページングで読み込まれた写真をクリックしても、画面遷移せずにthickboxを開きたい。 何卒ご教示の程、お願い申し上げます。

質問者が選んだベストアンサー

  • ベストアンサー
  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.2

#1です。 >colorboxを入れてみまして、試しに >  ・・・・・・ >2ページ目以降を読み込み、その画像をクリックするとalertも出ず、 >ライトボックス風の窓が出ず画面遷移してしまいました その現象は、多分、thickboxの時と同じ状態ですよね? 初期設定で、 >$('img').click(function(){ ~~ とした時に存在しているimg要素しか対象にならないというのが原因と思われます。 (多分、thickboxの時もこれが原因であろうと推測します。) しかし、colorboxの場合は初期設定をユーザが行なえるようになっているのと、表示したい要素を指定して渡せるようになっているので、ライブラリを修正することなく違った設定がをすることが可能になります。 ◆まず、#1での回答の方法。 colorboxを読み込んで、通常行なう初期設定を行なう代わりに以下のようなコードを実行。 $(document).click(function(e){ var t = e.target; if(t.nodeName != "IMG") return; var a = $(t).closest("a"); var url = a.length?a.attr("href"):$(t).attr("src"); $.colorbox({href:url}); return false; }); 内容は、ドキュメント全体を監視してクリックされた要素がimg要素だったら、直近のリンク要素を調べcolorboxに渡す。 というものですが、ついでにおまけでつけた機能として、祖先にリンク要素がない場合は自分自身をcolorboxに渡すようになっています。 (画像をそのまま縮小表示してサムネイル化している場合などに使えるかと…) ◆jQueryのlive()を利用する方法 (ほとんど同じですが、live()は後から追加された要素も対象にしてイベントをセットできる機能で、これを利用すれば少しだけ簡単になります) $(function(){ $("a img").live("click", function(){ $.colorbox({href:$(this).closest("a").attr("href")}); return false; }); }); 内容はリンク要素の子要素になっているimg要素がクリックされたら、リンク要素のリンク先をcolorboxに渡す。というものですが、単にimg要素がクリックされたら~として、最初の例と同じような処理をすることも可能です。 キャプションを付けたり、その他のオプションも利用できると思いますので、お試しください。

fool_dev
質問者

お礼

live(); を使用して、無事、オートページングで読み込んだ画像からもライトボックス風表示をすることが出来ました。 大変なお手数をおかけしてしまいましたが、おかげさまで処理が前に進みます。 本当にありがとうございました。

その他の回答 (1)

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.1

実際に、確かめてはいませんが… thickboxは読み込んだときに、初期設定でbody内を走査して対象となるイベントをセットしているのではないでしょうか? それなので、後から追加されたものには(イベントがセットされていないので)、通常のリンクとして動作しているという現象では? 回避するには、動的に後から追加した時にも対象となるようにthickbox用のイベントをセットしてあげるか、あるいはイベントをいちいちセットせずにdocument(やbody)でクリックイベントを監視して、対象とする要素だったら拡大表示するといったような方法が思いつきます。 前者は、画像の追加がライブラリで行なわれていて、thickboxの初期設定も内部で行なわれているので、どちらかあるいは両方を解析して修正する必要があります。 後者の方法ではイベントをセットする必要はありませんが、thickboxに受け渡す必要があるので、thickboxを解析する必要があります。(場合によっては修正も) thickboxの配布元を見てみると、「メンテしないから他のを使ってね」みたいなことが書いてありませんか? (英語はさっぱりわからないので、雰囲気だけで見てますが…) http://jquery.com/demo/thickbox/ 試しに、一番上にあるcolorboxを見てみると、APIが公開されていますので、監視のイベント処理内からcoloroboxを起動することができるので、このようなAPIが公開されているライブラリを利用すればよいのではないでしょうか?(そうすればいじる必要はなくなる) 仮に、表示されている画像が全て拡大対象であると仮定してよければ、classなどの識別子も不要になりますね。 大雑把な方法としては、 ・documentなどで全体のクリックイベントを監視する ・そのなかで画像要素がクリックされたら、その親のリンク要素のhref属性をcolorbox(←仮にこれとして)に引き渡す みたいなことで、ご質問の内容が実現できると思います。

fool_dev
質問者

お礼

ご丁寧なご回答ありがとうございます。 ただ、もともとjQueryは素人で、fujillin様のおっしゃる処理が分からず申し訳ありません。 colorboxを入れてみまして、試しに $(document).ready(function(){ $('img').click(function(){ alert('clicked'); $(this).closest('a').colorbox(); }); ~ここにmasonry+Infinitescrollの処理~ )}; としてみたところ、 ・1ページ目の画像はクリックするとalertが出てライトボックス風の窓が出ました ・スクロールダウンして2ページ目以降を読み込み、その画像をクリックするとalertも出ず、ライトボックス風の窓が出ず画面遷移してしまいました。 根本的に私のjQueryの書き方が間違えているようでしたら、お手数ですが再度ご教示願えますでしょうか。

関連するQ&A

  • thickboxのjavascriptについて

    ウェブサイト作成初心者です。 ホームページの一部のページでthickboxを使用してhtmlを表示するページを作ろうとしています。 その場合 <head>~</head>内に <script type="text/javascript" src="jquery.js"></script> <script type="text/javascript" src="thickbox.js"></script> <link href="thickbox.css" rel="stylesheet" type="text/css" /> はthickboxを使うページだけに記述すればいいのでしょうか。それとも前ページに記述しないといけないのでしょうか。 お分かりなられる方、お手数ですが教えてくださいませ。

    • ベストアンサー
    • HTML
  • light boxが上手く表示されない

    はじめまして。 ホームページ作成初心者の者です。 今独学でホームページを作成してまして写真をlightboxを使って表示させたいのですが上手く拡大されず、そのままのサイズで中途半端に表示されます。 HTML内の<head>~</head>タグ内の記述は以下になります。 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja"> <head> <meta http-equiv="content-type" content="text/html;charset=utf-8"> <script type="text/javascript" src="js/prototype.js"></script> <script type="text/javascript" src="js/scriptaculous.js?load=effects,builder"></script> <script type="text/javascript" src="js/lightbox.js"></script> <link rel="stylesheet" href="css/lightbox.css" type="text/css" media="screen" /> <link rel="stylesheet" href="style.css" type="text/css"/> <title>写真ギャラリー</title> </head> 以下1部省略 <div id="gallery-boxA"> <p> <a href="images/ナゴラン.jpg"rel="lightbox" title="ナゴラン"><img src="images/ナゴラン.jpg" width="200" height="180" /></a> <a href="images/ケイタイオウフウラン.jpg"rel="lightbox" title="ケイタイオウフウラン"><img src="images/ケイタイオウフウラン.jpg" width="200" height="180" /></a> <a href="images/サガリラン.jpg"rel="lightbox" title="サガリラン"><img src="images/サガリラン.jpg" width="200" height="180" /></a> </p> </div>になります。 初めての質問でどう説明していいのかも解からずこういう質問の仕方で申し訳なく思っております。 上手く拡大表示するにはどうしたらいいのでしょうか? 何かしら思い当たる点がございましたら参考までに教えて頂けたらと思います。 よろしくお願いします。

  • thickboxで画像ギャラリーが表示されない

    あるサーバー上でthickboxの画像ギャラリーが表示されていたんですが、別のサーバに移し変えたとたんに表示されなくなりました。 <script language="javascript" src="js/jquery.js" type="text/javascript" charset="UTF-8"></script> <script type="text/javascript" src="js/thickbox.js" charset="UTF-8"></script> <link rel="stylesheet" href="css/thickbox.css" type="text/css" media="all"> </head> <body> <div class="others"><a href="new_bike/12413289033.jpg" title="花" rel="old" class="thickbox"><img src="images/other_button.gif" border="0" alt="その他の画像" class="rollover" /></a><a href="new_bike/12413289034.jpg" title="木" rel="old" class="thickbox" style="display : none;"></a></div> 表示されなくなってからはスクリプトタグ内にcharset="UTF-8"を追加しただけです。 サーバ環境に依存するのでしょうか? 教えてください。 宜しくお願いします。

  • 外部javascriptを動的に読み込むには

    お世話になっております。 何度か質問させていただいているjavascrip初心者です。 外部jsファイルをボタンクリックなど何かのイベントで動的に読み込む方法がないか模索しています。 http://foofoo77.web.fc2.com/thickbox/test_index.html ↑上記ページは「書き換える」ボタンを押すと javascriptのappendChildで <div id="target1">書き換え</div> の中にscriptタグが追加される動きにしています。 書き換え後に「クリックしてみてください!」をクリックすると thickboxが動作する動きにしたいと思っています。 ieだとうまく挙動するのですが、firefoxだとthickboxは動作してくれません。 どうすればうまく挙動させれることができるこができますでしょうか? ご教授よろしくお願いいたします。 ※今回はthickboxのjs読み込みで試していますが、実際にやりたいことはもっと読み込みが重いjsの動的な読み込みです。

  • <script>記述したらレイアウトに変化が...

    お世話になります。どうしても分からないので、また質問させてください。 現在制作中のサイトにthickboxを使って、大きな画像を表示させたいと考えています。 それで、当たり前ですが、thickboxをダウンロードして<head>内に下記のように記述しました。 <link href="css/thickbox.css" rel="stylesheet" type="text/css" media="all"/> <script language="JavaScript" type="text/JavaScript"></script> <script type="text/javascript" src="js/jquery.js"></script> <script type="text/javascript" src="js/thickbox.js"></script> thickbox自体は特に問題なく作動するのですが、ところがおかしなことにレイアウト面で若干変化が生じました。具体的に言うと、 1:div#headerの<h1>見出し分が10pxほど上へ上がった(ウインドウの最上部に表示されるようになった) 2:marginでピクセル指定して配置していたロゴ画像がやはり15pxくらい上へ上がって表示されるようになった。(そもそもロゴ画像がどのブラウザで見ても同じところに表示するように方法が分からなかったので、このように記述したのですが、これは根本的に問題ありかもしれません。) 3:thickboxを使用しているdiv#rightmenuの下に全ページ共通で表示させているdiv#adress-areaという店舗情報を記述する部分があるのですが、そこのmargin-bottom:10px;が適用されていない。他のCSS記述はそのまま生きている。 ちなみにthickboxを使用しているページ以外はこのような現象は見られません。 これはどうしてでしょうか。もしよければアドバイスください。 THML: <body> <div id="header"> <h1>見出し文</h1> <a href="index.html"><img src="images/logo.gif" alt="ロゴマーク" border="0"></a> </div> <div id="contens"> <div id="leftmenu"> 省略 </div> <div id="rightmenu"> <div id="rightbox-inside"> <ul id="resultList"> <li><a href="images/001.jpg" class="thickbox" title="タイトル"><img src="images/01.jpg" alt="代替テキスト"/></a></li> <li><a href="images/001.jpg" class="thickbox" title="タイトル"><img src="images/01.jpg" alt="代替テキスト"/></a></li> <li><a href="images/001.jpg" class="thickbox" title="タイトル"><img src="images/01.jpg" alt="代替テキスト"/></a></li> <li><a href="images/001.jpg" class="thickbox" title="タイトル"><img src="images/01.jpg" alt="代替テキスト"/></a></li> <li class="mustright"><a href="images/001.jpg" class="thickbox" title="タイトル"><img src="images/01.jpg" alt="代替テキスト"/></a></li> </ul> </div> <div style="clear:both; "></div> <div id="rightbox-buttom"> <img src="images/rightbox-buttom.jpg" alt="代替テキスト"> </div> </div> <div id="adress-area"> <p class="adress-txt">店舗情報いろいろ</p> </div> <div style="clear:both;"></div> </div> <div id="footer"> 省略 </div> </body> CSS>> body { background-image:url(../images/body.jpg); background-position:top center; background-repeat:no-repeat; background-color:rgb(237,232,195); margin:0px; } /* Header部分CSS */ div#header { width:800px; height:150px; margin-left:auto; margin-right:auto; } #header h1 { color:#666666; font-family:"MS Pゴシック", Osaka, "ヒラギノ角ゴ Pro W3"; font-size:x-small; } #header img { margin:77px 0px 0px 10px; } /* Contens部分CSS */ div#contens { border-bottom:1px dotted #333333; width:800px; min-height:700px; margin-left:auto; margin-right:auto; padding-bottom:10px; } /* Leftmenu部分CSS */ div#leftmenu { width:155px; float:left; } /* rightmenu部分CSS */ #rightmenu { width:645px; float:right; padding-top:20px; background:url(../images/rightbox-top.png) no-repeat; } html#rightmenu{ height: auto !important; height: 800px; } #rightbox-inside { background:url(../images/rightbox-inside.png) repeat-y; } #rightbox-buttom { clear:both; } /* thickboxを使用した表部分CSS */ #resultList { overflow:hidden; margin:0 25px 0 30px; padding:0; list-style-type:none; } #resultList li { float:left; display:inline; width:120px; text-align:center; } #resultList li.mustright { float:right; width:110px; padding-right:none; } #resultList li a { display:block; } #resultList li a img { border:none; } /*店舗情報部分CSS */ div#adress-area { width:620px; float:right; margin:5px 10px 5px 10px; background-color:#E6E6E6; } #adress-area p.adress-txt { width:300px; padding:0 0 0 20px; font-family:"MS Pゴシック", Osaka, "ヒラギノ角ゴ Pro W3"; font-size:12px; letter-spacing:130%; line-height:160%; color:#333; float:left; }

    • ベストアンサー
    • CSS
  • jqueryのloadで読み込んだページ内でthickboxで画像を表示する方法

    画像表示処理方法で教えて頂ければと思います。 テスト用に2つのファイル(index.html, test.html)を用意しました。 index.htmlで thickboxを使用して画像をクリックすると希望通り (画像がアップ表示)の動作をします。 しかしindex.htmlのloadで test.html読み込んだ時の画像部分が、 target="_self"で押したときの動作になってしまいます。 解決方法、よろしくお願いします。 -----index.html----- <html> <head> <link href="thickbox.css" type="text/css" rel="stylesheet" /> <script type="text/javascript" src="jquery.js"></script> <script type="text/javascript" src="thickbox.js"></script> <script type="text/javascript"> <!-- function init(){ $("#Test").load("test.html"); } // --> </script> </head> <body onload="init()"> <div id="Test"></div> <hr> (2)<a href="test.gif" title="" class="thickbox"><img alt="" src="test.gif" /></a> </body> </html> -----test.html----- (1)<a href="test.gif" title="" class="thickbox"><img alt="" src="test.gif" /></a>

  • ページング処理

    こんにちわ。今、ページング処理に苦しんでいるものです。 データベースでデータが50件あるとして、10件以上あるときは 「次の10件へ」や「前の10件へ」というリンクをつくりクリックしたときにページ遷移をするというようなページングを実装したいのですが。 考え方がわからず、悩んでおります。 セレクト文で以下のように $strSQL = ""; $strSQL .= " SELECT "; $strSQL .= " * "; $strSQL .= " FROM "; $strSQL .= " BBS "; $strSQL .= " ORDER BY "; $strSQL .= " ID DESC "; $strSQL .= " LIMIT 10 "; $strSQL .= " OFFSET 20 "; 昇順で20行目から10行だけ取り出すということはできたのですが。 ページング処理のロジックがわからないのです。 なにか簡単なものでもいいので、記述などをしていただけますでしょうか?

    • ベストアンサー
    • PHP
  • Thickboxを自動で閉じることは不可能でしょうか?

    お世話になります Thickbox.jsを使用してloading graphのようなものを作っているのですが100%になったら自動で閉じるようにはできないでしょうか? <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html lang="ja"> <head> <title>Thickbox</title> <meta http-equiv="Content-Style-Type" content="text/css"> <meta http-equiv="Content-Script-Type" content="text/javascript"> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <script type="text/javascript" src="./js/jquery.js"></script> <script type="text/javascript" src="./js/thickbox.js"></script> <link rel="stylesheet" href="./css/thickbox.css" type="text/css" media="screen" /> </head> <body><div id="wrapper"> <a href="search.html?placeValuesBeforeTB_=savedValues&TB_iframe=true&height=90&width=300" title="charasearch" class="thickbox"> <input type="button" value="character search" class="search"> </a> </div> </body> </html> <<search.html>> 実際にはhtmlファイルではなくcgiファイル(search.cgi)で処理を行っています Thickbox.cssをいじって本文のみ表示させてます(上側のTitleやcloseボタンはdisplay:none;しています 必要なとこだけになりますが・・・ <script type="text/javascript"><!-- window.onload = function() { Timer = setInterval('counts()',1); } w=0; function counts() { w += 1; document.getElementById("graph").style.width = w + "px"; if(w >= 300) { clearInterval(Timer); } } //--></script> <style type="text/css"><!-- #graph { width:0px; height:20px; background-color:red; margin-top:5px; float:left; } --></style> <div id="graph"><div> ページを移動させていけば簡単なのですが大まかな流れとして id,passなどを入力 character searchボタンを押す Thickboxでseach.cgiを呼び出しchara.cgiの中から同じものがないか調べる あればエラー表示、なければ続けて入力といった感じにしています

  • 100%ボックス・フッタ固定、IE6だけ左寄り…

    いつもお世話になっています。 画像のような構成で、100%ボックスの下にフッターを付けたページ なのですが、IE6だと左寄せになってしまいます。 いろんなCSS解説のHPを渡り歩いてみたのですが、どこが悪いのか 分からず。 どうぞよろしくお願いします。 /*100%ボックスとフッター画面の下固定のためのCSS-------------*/ html{ height: 100%; } body{ background-image: url(../common/bg.gif); height: 100%; text-align: center;/*ie6 centering*/ } * html div#container{ height: 100%; } div#container{ width: 800px; margin: 0 auto; background-color: #FFFFFF; position: relative; min-height: 100%;   text-align: left;/*ie6 centering*/ } body > #container { height: auto; } div#main{ padding: 0 0 60px 0; } div#main:after { content: ""; display: block; clear: both; height: 1px; overflow: hidden; } /*\*/ * html #container { height: 1em; overflow: visible; } /**/ /*フッター---------------------------------------*/ #footer{ clear:both; background-color:#4682B4; position:absolute; bottom:0px; height:30px; width:100%; text-align:center; line-height:30px; font-size:80%; color:#FFFFFF; }

    • ベストアンサー
    • HTML
  • FireFoxでLightbox2の下画面がずれる

    いつもお世話になっています。 Lightbox2を使用してフォトギャラリーを作りました。 写真を並べてサムネイルをクリックすると上に写真が表示される ベーシックなタイプです。 IEでは問題ないのですが、FireFoxでLightbox2では、 上の写真が表示されると同時に下の画面が左に少しずれます。 上の写真を閉じるとまた元に戻ります。 他にページ内でスクリプトは使っていません。 <div id="container"></div> #container { margin: 0 auto;} で全体を囲っています。 お力添えをお願いいたします。

専門家に質問してみよう