Lightbox風モーダルウィンドウ

3-8ではLightbox風モーダルウィンドウが登場!これはいつもプラグインでやっていたjQueryでした。やっと自分で出来るようになるとは!

 

やり方が実に「なるほど!」というものです。

最初にHTMLとCSSで表現を考えておきます。今回はモーダルウィンドウが開いた状態をHTMLで考えておきます。

ID名「glayLayer」で画面いっぱいの透明グレーのdivを作っておき、その上にポップアップされた画像をID名「overLayer」で置くようにposition指定します。

 

次にjQueryの実装に入ります。その際は先ほどの「glayLayer」と「overLayer」をHTML内から外しておきます。(jQueryでこのdivたちを挿入する命令をするのです!)

どのように入れるかというと、$(' body ')にappend()を使って<div id="glayLayer"></div><div id="overLayer"></div>を入れます。

最初の命令に「glayLayerをクリックしたとき、ポップアップのdiv要素がhide()する」という記述をしておきます。

次にクラス名「modal」が付いたa要素をクリックするとdivたちが表示される命令をします。

append()も実は「そういえばあった…」という感じで参考書を見返しました。(^ ^;;

 

それと、ちょっと難しく感じたのが「画像ではなくテキストをモーダルウィンドウにしたい」という部分です。テキストにするとwidth、heightがバラバラで、position指定ができないため、その要素の位置を取得する方法も考える必要があります。

そこで登場するのがwidth()、height()!ちょっとややこしいですが、参考書に書いてあったのが、

"margin-top": "-"+$("#overLayer").height()/2+"px",

"margin-left": "-"+$("#overLayer").width()/2+"px"

さらに閉じるボタンも設置しておけば完璧です。

 

次の章のドラッグ&ドロップで動くフローティングウィンドウも位置を取得する系です。mousedown()、mouseup()イベントが出てきて、「こういうときに使うのか!」と思ってしまいました。

位置を取得する「function(e)」「e.pageX」「e.pageY」、「$(セレクタ).offset().top」「$(セレクタ).offset().left」はまだまだ自分のものにしていないのを実感しています。

本当によく出てくる命令なので、覚えてしまおうと思います。