質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
jQueryプラグイン

jQueryの拡張機能。 様々な種類があり、その数は膨大です。公開済みのプラグインの他にも、自作することもできます。 jQueryで利用できるようにしておくだけで、導入およびカスタマイズが比較的容易に行なえます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

0回答

189閲覧

プラグインMansonryの動きに関して

maakun

総合スコア22

jQueryプラグイン

jQueryの拡張機能。 様々な種類があり、その数は膨大です。公開済みのプラグインの他にも、自作することもできます。 jQueryで利用できるようにしておくだけで、導入およびカスタマイズが比較的容易に行なえます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

2クリップ

投稿2019/02/13 07:46

###プラグインMansonryの動きに関して
以下、addItemsの関数内の最後の方にあるif内でmansonryにて再配置している意味が分かりません。
if文を抜いても動くと思いましたが動きません。
ご教授頂けたら幸いです。

以下分からない箇所を抜粋した部分です。

javascript

1if(filter){ 2 $container.masonry(); //フィルタリング時は再配置 3 }

以下コード全体になります。

javascript

1$(function(){ 2 let $container = $('#gallery'), 3 $loadMoreButton = $('#load-more'), //追加ボタン 4 $filter = $('#gallery-filter'), //フィルタリングのフォーム 5 addItemCount = 16, //一度に表示するアイテム数 6 added = 0, //表示済みのアイテム数 7 allData = [], //全てのJSONデータ 8 filteredData = []; //フィルタリングされたJSONデータ 9 10 $container.masonry({ 11 columnWidth: 230, 12 gutter: 10, 13 itemSelector: '.gallery-item' 14 }); 15 16 //JSONを取得し関数実行(関数の引数(JSONのデータ)は外に定義している関数に) 17 $.getJSON('./data/content.json', initGallery); 18 19 function initGallery(data){ 20 //dataはこの関数内でしか使用できない為、外で宣言したallDataに代入して使い回せるように 21 allData = data; 22 23 //フィルタリング保持のために代入 24 filteredData = allData; 25 26 addItems(); //最初のアイテムを表示するための関数 27 28 $loadMoreButton.on('click', addItems); //クリックされたら追加で表示 29 30 //フィルターのラジオボタンが変更されたらフィルタリング実行 31 $filter.on('change', 'input[type="radio"]', filterItems); 32 33 function addItems(filter){ 34 let elements = []; //masonryで使用するための空の配列を用意 35 36 //sliceで任意の切り出した配列を代入(第二引数に入る整数の1つ前までになるので注意) 37 let slicedData = filteredData.slice(added, added + addItemCount); 38 39 $.each(slicedData, function(i, item){ 40 let itemHTML = '<li class="gallery-item is-loading">' + 41 '<a href="' + item.images.large + '">' + 42 '<img src="' + item.images.thumb + '" alt="">' + 43 '<span class="caption">' + 44 '<span class="inner">' + 45 '<b class="title">' + item.title + '</b>' + 46 '<time class="date" datatime="' + item.date + '">' + 47 item.date.replace(/-0?/g, '/') + 48 //replaceで検索して置き換え 49 '</time>' + 50 '</span>' + 51 '</span>' + 52 '</a>' + 53 '</li>'; 54 elements.push($(itemHTML).get(0)); 55 }); 56 57 $container.append(elements).imagesLoaded(function(){ 58 $(elements).removeClass('is-loading'); 59 $container.masonry('appended', elements); 60//以下のifの中の動きが分かりません 61 if(filter){ 62 $container.masonry(); //フィルタリング時は再配置 63 } 64 }); 65 //addedの更新(slicedDataの配列要素数をプラス) 66 added += slicedData.length; 67 68 //JSONがすべて出し終わっていたら追加buttonを消す 69 if(added < filteredData.length){ 70 $loadMoreButton.show(); 71 }else{ 72 $loadMoreButton.hide(); 73 } 74 }; 75 76 //input[radio]が操作された時 77 function filterItems(){ 78 let key = $(this).val(); //操作があったradioのvalueを変数に代入 79 80 //現在表示されているアイテムを一旦リセットする必要がある為 81 //masonryによって追加/レイアウトされた要素を取得して変数に代入 82 let masonryItems = $container.masonry('getItemElements'); 83 84 //そしてmasonryによって削除 85 $container.masonry('remove', masonryItems); 86 87 //さらにフィルタリング済みのデータ/追加済みアイテムのデータもリセット 88 filteredData = []; 89 added = 0; 90 91 if(key === 'all'){ 92 filteredData = allData; //key(選択されたvalue)がallなら 93 }else{ 94 //違うならallDataを対象に条件関数にてkeyと同じ値の要素を抽出して変数に代入 95 filteredData = $.grep(allData, function(item){ 96 return item.category === key; 97 }); 98 }; 99 100 addItems(true); //addItem内のifにtrueを渡すため 101 } 102 }; 103}); 104

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問