サンプル
「Flickr:Setの写真を表示する」をMasonryに対応するように変更した。
場合によっては、「Flickr:Setの写真を表示する」に記載した方法が良い場合もある。
参考:jQueryで可変グリッド・Masonryプラグイン
(なぜか、http://www.geocities.jp/winchester_cathedral_nostalgy/tips/FlickrPhotoSet_tile/index.html では、window.resizeが機能しない。
http://cgi.geocities.jp/winchester_cathedral_nostalgy/tips/FlickrPhotoSet_tile/index.html を使用。)
場合によっては、「Flickr:Setの写真を表示する」に記載した方法が良い場合もある。
参考:jQueryで可変グリッド・Masonryプラグイン
(なぜか、http://www.geocities.jp/winchester_cathedral_nostalgy/tips/FlickrPhotoSet_tile/index.html では、window.resizeが機能しない。
http://cgi.geocities.jp/winchester_cathedral_nostalgy/tips/FlickrPhotoSet_tile/index.html を使用。)
◆ html
コードは下記のとおり。以下のjavascriptファイルを使用する。
jquery.js - ここからダウンロード
masonry.pkgd.min.js - ここからダウンロード
- <!DOCTYPE html>
- <html lang="ja">
- <head>
- <meta charset=UTF-8">
- <title>FlckrPhotoSet</title>
- <link rel="stylesheet" href="Flickr_photoset.css">
- <script src="jquery.js"></script>
- <script src="masonry.pkgd.min.js"></script>
- <script src="Flickr_photoset.js"></script>
- <script>
- var photoset_id = '72157635974998255'
- var consumerKey = 'f4bc240df0b0418fb80e3719ec173dc0';
- </script>
- </head>
- <body>
- <div id="header">Loading...</div>
- <div id="contents">Loading...</div>
- </body>
- </html>
Masonryを使用するため、8行目を追加した。
◆ javascript(Flickr_photoset.js)
- var list;
- var photoset_owner;
- window.onresize = function(){
- // #contentsの高さを全体の高さからtopの高さと20pxとを引いた高さにする
- var document_height = $(document).height();
- var header_height = $(header).height();
- document.getElementById('contents').style.height = (document_height - header_height-20) + "px";
- }
- window.onload = function () {
- ShowPhotos();
- }
6~9行目:
リサイズにはMasonryが対応してくれるので処理は不要。
#contentsの高さをウインドウに合わせて定義している。
こうしないと、#headerを固定して#contents部分だけをスクロールすることができない。
ShowPhotos()
htmlで定義した(photoset_id)photosetの情報を取得する。
- function ShowPhotos () {
- // Header
- // callback関数の生成
- window[ 'jsonHeader'] = function(obj){
- var description_ = obj.photoset.description._content.replace(/\n/g,"<br/>");
- var $title = $("<div>").html(obj.photoset.title._content).addClass("header_title"); // タイトルのタグを作成
- var $caption = $("<p>").html(description_).addClass("header_caption"); // キャプションのタグを作成
- var $div = $("<div>").append($title).append($caption); // div要素にタイトルのタグとキャプションのタグを追加
- $("#header").html($div); // 上記で作成したタグでid="header"の要素のタグを置き換え
- };
- // リクエスト
- var arguments = {
- api_key: api_key,
- photoset_id: photoset_id,
- format: "json",
- jsoncallback: "jsonHeader",
- method: "flickr.photosets.getInfo"
- };
- flickrRest(arguments);
- // Photos
- // callback関数の生成
- window[ 'jsonPhotos'] = function(data){
- list = data.photoset.photo;
- photoset_owner = data.photoset.owner;
- Album();
- };
- // リクエスト
- var arguments = {
- api_key: api_key,
- photoset_id: photoset_id,
- format: "json",
- jsoncallback: "jsonPhotos",
- method: "flickr.photosets.getPhotos",
- extras: "geo,date_taken,owner_name,description,o_dims"
- };
- flickrRest(arguments);
- }
ここは変更なし。
Album()
photosetの写真、タイトル(title)、descriptionを表示する。
- function Album () {
- // #contentsの高さを全体の高さからtopの高さと20pxとを引いた高さにする
- var document_height = $(document).height();
- var header_height = $(header).height();
- document.getElementById('contents').style.height = (document_height - header_height-20) + "px";
- var $box = [];
- var $contents = $('#contents').html("");
- for( var i=0; i<list.length; i++ ) {
- var photo = list[i];
- var src = 'http://www.flickr.com/photos/' + photoset_owner + '/' + photo.id + '/in/set-' + photoset_id;
- var $ahref = $('<a>', { href: src, target: '_blank' });
- var src = 'http://static.flickr.com/' + photo.server + '/' + photo.id+ '_' + photo.secret + '.jpg';
- var $img = $('<img>', { 'src': src });
- var $div = $('<div class="box">').append($ahref).append($img);
- if ( photo.title != "") {
- var $photoTitle = $('<div >', { class: "photo_title", text: photo.title });
- $div.append($photoTitle);
- }
- if ( photo.description._content != "" ){
- var caption = photo.description._content.replace(/\n/g,"<br/>")
- var $photoCaption = $('<div>', { class: "photo_caption", text: caption });
- $div.append($photoCaption);
- }
- $contents.append($div);
- $box[i] = $div;
- }
- $('#contents img').bind('load',function(){
- masonryBox ($contents,$box);
- });
- }
8,9行目を変更。
30,31行目を変更。
34~36行目を変更。
19行目:画像を読み込み中にfloatで表示させるため、classをしています。
尚、4~6行目では、#contentsの高さをウインドウに合わせて定義している。
こうしないと、#headerを固定して#contents部分だけをスクロールすることができない。
masonryBox()
masonryを用いて表示する。
- function masonryBox ($container,$box) {
- var $div = $('<div id="masonry_list">');
- for( var i=0; i<$box.length; i++ ) {
- var $tmp = $('<div>', { class: "item", style: "margin:5px;" }).append($box[i]);
- $div.append($tmp);
- }
- $container.html("")
- .append($div);
- $('#masonry_list').masonry({
- isAnimated: true,
- duration: 400,
- itemSelector: '.item',
- isFitWidth: true
- });
- }
6行目:"margin:5px;"にしないと、写真の間に間隔がなく、くっついて表示されてしまう。
flickrRest()
FlickrにArgumentsを送付する関数
- function flickrRest (arguments) {
- // APIリクエストURLの生成
- var url = 'https://www.flickr.com/services/rest/?'+
- obj2query(arguments);
- // script 要素の発行
- var script = document.createElement( 'script' );
- script.type = 'text/javascript';
- script.src = url;
- document.body.appendChild( script );
- }
- // オブジェクトからクエリー文字列を生成する関数
- function obj2query ( obj ) {
- var list = [];
- for( var key in obj ) {
- var k = encodeURIComponent(key);
- var v = encodeURIComponent(obj[key]);
- list[list.length] = k+'='+v;
- }
- var query = list.join( '&' );
- return query;
- }
ここは変更なし。
◆ css
- * {
- margin: 0px;
- padding: 0px;
- }
- html, body {
- height: 100%;
- margin: 0px;
- padding: 0px;
- overflow: hidden;
- }
- #header {
- background-color: white;
- }
- #contents {
- overflow: scroll;
- background-color: #EFE;
- }
- .box {
- float: left;
- margin: 5px;
- }
- .header_title {
- text-align: left;
- margin: 0px;
- font: bold 32px arial,sans-serif;
- color: limegreen;
- }
- .header_caption {
- text-align: left;
- margin: 10px;
- font: 14px arial,sans-serif;
- color: black;
- }
- img {
- border: none;
- }
- .photo_title {
- text-align: left;
- margin: 0px;
- font: bold 16px arial,sans-serif;
- text-decoration: none;
- color: black;
- }
- .photo_caption {
- text-align: left;
- margin: 0px;
- font: 16px arial,sans-serif;
- color: black;
- }
22~25行目:画像を読み込み中にfloatで表示させています。
以上