画像のサイズや列数を変えてTabulatorでサムネイル表示させる為、列数、列幅を動的設定してみました。
< コード例 >
ローカルストレージにあるユーザー設定読込
// == ユーザー設定読込 == //
const envmap = new ConfigPhoto().readLSMap()
const w = envmap["thumbwidth"] // 列幅
const colcnt = envmap["colcnt"] // 列数
// サムネイル列 //
let COLUMNS = [
{title: `検索結果 X <span id="cnt_photo"></span>
`,
columns: []
}
]
// ++ 設定列数分の列を動的追加 ++ //
for (let j = 0; j < colcnt; j++) {
// 画像列 //
const coltmp = {
title: "", field: "COL" + j, width: w, hozAlign: "center",
formatter: cellFormat, contextMenu: cellContextMenu
}
COLUMNS[0]["columns"].push(coltmp);
// 非表示列 //
COLUMNS[0]["columns"].push({field: "COL" + j + "_COL_AVG", visible: false})
COLUMNS[0]["columns"].push({field: "COL" + j + "_URL", visible: false})
COLUMNS[0]["columns"].push({field: "COL" + j + "_PHOTOID", visible: false})
COLUMNS[0]["columns"].push({field: "COL" + j + "_TITLE", visible: false})
COLUMNS[0]["columns"].push({field: "COL" + j + "_PHOTOGRAPHER", visible: false})
COLUMNS[0]["columns"].push({field: "COL" + j + "_POS", visible: false})
COLUMNS[0]["columns"].push({field: "COL" + j + "_IDX", visible: false})
COLUMNS[0]["columns"].push({field: "COL" + j + "_CATEG_KANJI", visible: false})
COLUMNS[0]["columns"].push({field: "COL" + j + "_URL_ORIGINAL", visible: false})
}
// 列設定 //
const tablerows = this.getArrangedColumnsDataColCnt(data, colcnt)
// ++ Tabulator ++ //
let table = new Tabulator("#table_photos", {
columns: COLUMNS,
data: tablerows,
//placeholder: '見つかりませんでした',
//layout: 'fitColumns',
//layout:"fitData",
layout: "fitDataTable",
rowHeight: Math.round(w * 3 / 4),
headerVisible: false
})
列設定メソッド
/**
* テーブル用サムネイル列設定
* 列数指定用 使用
*
* @param {type} data 応答データ
* @param {type} colcnt 列数
* @returns {Array|Photos.getArrangedColumnsData.resdatas}
*/
getArrangedColumnsDataColCnt(data, colcnt) {
// == ユーザー設定幅読込 == //
const w = new ConfigPhoto().readLSMap()["thumbwidth"]
let resdatas = []
let row = {}
data.forEach((tmp, i) => {
const mod = i % colcnt;
row["COL" + mod] = w <= 250 ? tmp["URL_SMALL"] : tmp["URL_MEDIUM"]
row["COL" + mod + "_COL_AVG"] = tmp["COL_AVG"]
row["COL" + mod + "_URL"] = tmp["URL"]
row["COL" + mod + "_PHOTOID"] = tmp["PHOTOID"]
row["COL" + mod + "_TITLE"] = tmp["TITLE"]
row["COL" + mod + "_PHOTOGRAPHER"] = tmp["PHOTOGRAPHER"]
row["COL" + mod + "_POS"] = tmp["POS"]
row["COL" + mod + "_IDX"] = tmp["IDX"]
row["COL" + mod + "_NM_CATEG_KANJI"] = tmp["NM_CATEG_KANJI"]
row["COL" + mod + "_URL_ORIGINAL"] = tmp["URL_ORIGINAL"]
if (i === data.length - 1) {
resdatas.push(row)
}
else if (mod === colcnt - 1) {
resdatas.push(row)
row = {}
}
})
return resdatas
}
< 画面例 >
幅250px 5列
幅100px 12列
幅60px 16列