横浜のフリーランスWeb制作者ブログ
jQuery lightBox pluginでprototype版世代のrelグループセットを有効にする方法
割と感動したのでメモ。
このサイトでも度々使用している、画像の拡大表示やスライドショーを実装する「lightbox」。数年前からprototype.js版で存在していたのですが、今やjavascriptライブラリと言えばjQuery!と、いうことでこのサイトのlightboxは最初からjQuery版lightboxなのです。
当サイトで使用しているのは
jQuery lightBox plugin 0.5
※jQuery版lightboxにはいろんな作者のいろんなバージョンがあります
実装は極めて簡単なのですが、一つ問題があります。
旧来のprototype版では、rel="lightbox[hogehoge]"と書くだけでグループセットが作れていました。
1 2 3 4 |
このグループ分けがjQuery lightBox plugin 0.5では無効になってしまい、基本的な使い方では同じページ内の画像であれば全て一つのグループとして認識されてしまいます。一番困るのは、ブログで複数の記事がアーカイブ表示されていて、画像をスライドショーで見ると他の記事の画像までひとまとまりにされてしまう点ですね。
グループ毎にclassを変えて、headerに
1 2 3 4 5 6 | $(function() { $('a.lightbox1').lightBox(); $('a.lightbox2').lightBox(); . . . |
などと加えていく手もありますが、あまりに非効率です。prototype版から乗り換えたいという人も多いでしょうし、何か良い手は無いのでしょうか。
ありました。
How-to modify jQuery Lightbox Plugin to use Image Sets(fatlab様)
記事上では、まずjquery.lightbox-0.5.jsの79~82行目を以下に置き換えています。
79 80 81 82 83 84 | // Add an Array (as many as we have that match the objClicked 'rel' attr), with href and title atributes, inside the Array that storage the images references for ( var i = 0; i < jQueryMatchedObj.length; i++ ) { if(jQueryMatchedObj[i].getAttribute('rel')==objClicked.getAttribute('rel')) { settings.imageArray.push(new Array(jQueryMatchedObj[i].getAttribute('href'),jQueryMatchedObj[i].getAttribute('title'))); } } |
その上で、HTMLヘッダーでlightboxへのアクセスを以下のみとします。
1 2 3 4 | $(function() { // Select all links whose attribute rel starts with lightbox $('a[rel^=lightbox]').lightBox(); }); |
これで、旧来のrelを使ったグループ分けが復活します。凄い!
なお、WordPressで
とした際、条件によっては]"の部分が化けてしまうことがありました。ので、可能であれば
のように[]を使用しないパターンに置換したほうが良いかも知れません。
…初めてじゃないか、Web制作らしい話題が。
Posted: 2010年 3月 09日 15:27 by shige
Tagged with javascript, jQuery, lightbox
Categories: web制作
Comments: 2 comments
関連記事
トラックバックURL
コメント & トラックバック
コメント
Additional comments powered byBackType



ありがとうございます!
現在制作中のサイトでこの問題に直面していまして…。
とても参考になりました。
Posted at 2010年 10月 12日 12:08 by tomi
tomi様
はじめまして!
「jQuery lightbox グループ…」といった検索でご覧になられる方が、本当に多いようで、皆さん同じように困ってるんだなぁ、と思っておりました。
配布元が次期バージョンでこの問題にも対応してくれるとなお嬉しいですね。
Posted at 2010年 10月 12日 12:20 by shige