メイソンリーレイアウト


Spread.Viewsでは、メイソンリーレイアウトを使用できます。メイソンリーレイアウトは、行をカードとみなして処理する、動的なグリッドレイアウトプラグインです。カードレイアウトでは、同一サイズの表示ブロックにデータが表示されますが、メイソンリーレイアウトでは、高さや幅を自由に変えられるコンテナ内にカードを表示できます。

メイソンリーレイアウトで選択できるオプションは、次のとおりです。

オプション デフォルト値 説明
rowHeight 1 水平方向に並べたカードに対し、カード間(行間)の最小距離を表します。デフォルト値に設定すると、メイソンリーレイアウトのカードは隣接して表示されます。
columnWidth 1 垂直方向に並べたカードに対し、カード間(列間)の最小距離を表します。デフォルト値に設定すると、メイソンリーレイアウトのカードは隣接して表示されます。
gutter 0 カード間の距離を制御します。
注意: gutterとrowTemplateはそれぞれ別のオプションです。gutterはカード間のスペースを設定するのに使用し、rowTemplateはカードをフォーマットするテンプレート要素を表します。
keepOrder true メイソンリーレイアウトに適用するレイアウト方法を指定します。
trueに設定すると、メイソンリーレイアウトの各カードは、データを指定した順序に従って1つずつプッシュされます。
falseに設定すると、余分なスペースが最小となるように、コンパクトなレイアウトが自動作成されます。
rightToLeft false 右から左の順に表示するかどうかを定義します。
showScrollBar true スクロールバーを表示するかどうかを定義します。

メイソンリーレイアウトを実装するには、次の手順を実行します。

サンプルコード

  1. DataView参照の後に、次のファイル参照を追加します。

    <link rel="stylesheet" type="text/css" href="[Your Stylesheet Path]/gc.spread.views.masonrylayout.10.0.0.css">
    <script src="[Your Script Path]/gc.spread.views.masonrylayout.10.0.0.min.js" type="text/JavaScript"></script>
  2. bodyタグ内にdivタグを追加して、ページ内のコンテナとしてDOM要素を含めます。次に、template要素を追加して、各カードを配置します。

     <div id="grid1" style="height:100%"></div><template id="rowTemplate" style="display:none">
        <div class="img-board">
            <div data-column="image"></div>
            <div class="image-meta">
                <div data-column="meta" class="image-meta-context"></div>
            </div>
    </div>
  3. 2列から成るテーブルの列定義を追加します。1つの列にはイメージを配置し、もう1つの列には説明を表示します。

    var columns = [{
            id: 'image',
            name: 'image',
            dataField: 'image',
            presenter: '<img class="image-content" src="{{=it.image}}" alt="dogs">'
        }, {
            id: 'meta',
            name: 'meta',
            dataField: 'meta',
            presenter: '<div class="image-meta-context">{{=it.meta}}</div>'
        }];
  4. イベントリスナの定義において、コードを初期化します。

    var dataView = new GC.Spread.Views.DataView(document.getElementById('grid1'), data, columns, new GC.Spread.Views.Plugins.MasonryLayout({
                gutter: 12,
                rowTemplate: '#rowTemplate'
            }));
            window.dataView = dataView;
    
            window.addEventListener('resize', function() {
                dataView.invalidate();
        });