SharePoint のリストを、ビューの書式設定を利用して上図のようなピアノに変身させてみました。
鍵盤をクリックすると、鍵盤の上に C(ド) や D(レ)などの音名は表示されるのですが、残念ながら音は出ません。
以下、ピアノの作成方法を記載します。
フィールド定義
カスタムリスト作成時にデフォルトで定義されている タイトル
列のみ利用します。
従って、他にフィールドを定義する必要はありません。
アイテム作成
音名を C(ド)から順番に、表示させたい鍵盤分登録していきます。
ビューの書式設定
ビューの書式設定に、以下に掲載されている JSON を設定すれば完成です。
サイトテーマカラーのピアノの JSON
{ "$schema": "https://developer.microsoft.com/json-schemas/sp/v2/row-formatting.schema.json", "hideColumnHeader": true, "hideSelection": true, "rowFormatter": { "elmType": "div", "style": { "width": "= @window.innerWidth * 0.07 + 'px'", "height": "= @window.innerHeight * 0.6 + 'px'", "border-top": "3px solid", "border-bottom": "3px solid", "border-right": "3px solid", "border-left": "=if(@rowIndex == 0 , '3px solid' '')", "position": "absolute", "top": "0", "left": "= @rowIndex * @window.innerWidth * 0.07 + 'px'", "cursor": "pointer" }, "attributes": { "class": "ms-fontColor-themePrimary ms-bgColor-themeLighter--hover" }, "children": [ { "elmType": "div", "style": { "width": "100%", "height": "100%", "position": "relative" }, "customCardProps": { "openOnEvent": "click", "directionalHint": "topCenter", "isBeakVisible": false, "formatter": { "elmType": "div", "style": { "padding": "30px" }, "attributes": { "class": "ms-bgColor-themePrimary" }, "children": [ { "elmType": "div", "txtContent": "[$Title]", "style": { "font-size": "30px", "font-weight": "bold" }, "attributes": { "class": "ms-fontColor-white" } } ] } }, "children": [ { "elmType": "div", "style": { "position": "absolute", "top": "0", "left": "0", "width": "30%", "height": "60%", "display": "=if(@rowIndex % 7 == 0 , 'none' , if(@rowIndex % 7 == 3 , 'none' , ''))" }, "attributes": { "class": "ms-bgColor-themePrimary ms-bgColor-themeDark--hover" }, "customCardProps": { "openOnEvent": "click", "directionalHint": "topCenter", "isBeakVisible": false, "formatter": { "elmType": "div", "style": { "padding": "30px" }, "attributes": { "class": "ms-bgColor-themePrimary" }, "children": [ { "elmType": "div", "txtContent": "= [$Title] + '♭'", "style": { "font-size": "30px", "font-weight": "bold" }, "attributes": { "class": "ms-fontColor-white" } } ] } } }, { "elmType": "div", "style": { "position": "absolute", "top": "0", "right": "0", "width": "30%", "height": "60%", "display": "=if(@rowIndex % 7 == 2 , 'none' , if(@rowIndex % 7 == 6 , 'none' , ''))" }, "attributes": { "class": "ms-bgColor-themePrimary ms-bgColor-themeDark--hover" }, "customCardProps": { "openOnEvent": "click", "directionalHint": "topCenter", "isBeakVisible": false, "formatter": { "elmType": "div", "style": { "padding": "30px" }, "attributes": { "class": "ms-bgColor-themePrimary" }, "children": [ { "elmType": "div", "txtContent": "= [$Title] + '♯'", "style": { "font-size": "30px", "font-weight": "bold" }, "attributes": { "class": "ms-fontColor-white" } } ] } } } ] } ] } }
レインボーカラーのピアノの JSON
{ "$schema": "https://developer.microsoft.com/json-schemas/sp/v2/row-formatting.schema.json", "hideColumnHeader": true, "hideSelection": true, "rowFormatter": { "elmType": "div", "style": { "width": "= @window.innerWidth * 0.07 + 'px'", "height": "= @window.innerHeight * 0.6 + 'px'", "position": "absolute", "top": "0", "left": "= @rowIndex * @window.innerWidth * 0.07 + 'px'", "cursor": "pointer" }, "attributes": { "class": "=if(@rowIndex % 7 == 0 , 'ms-bgColor-sharedRed10' , if(@rowIndex % 7 == 1 , 'ms-bgColor-sharedOrange10' , if(@rowIndex % 7 == 2 , 'ms-bgColor-sharedYellow10' , if(@rowIndex % 7 == 3 , 'ms-bgColor-sharedYellowGreen10' , if(@rowIndex % 7 == 4 , 'ms-bgColor-sharedCyan10' , if(@rowIndex % 7 == 5 , 'ms-bgColor-sharedCyanBlue10' , if(@rowIndex % 7 == 6 , 'ms-bgColor-sharedBlueMagenta10' , '')))))))" }, "children": [ { "elmType": "div", "style": { "width": "100%", "height": "100%", "position": "relative" }, "customCardProps": { "openOnEvent": "click", "directionalHint": "topCenter", "isBeakVisible": false, "formatter": { "elmType": "div", "style": { "padding": "30px" }, "attributes": { "class": "=if(@rowIndex % 7 == 0 , 'ms-bgColor-sharedRed10 ms-fontColor-white' , if(@rowIndex % 7 == 1 , 'ms-bgColor-sharedOrange10 ms-fontColor-white' , if(@rowIndex % 7 == 2 , 'ms-bgColor-sharedYellow10 ms-fontColor-white' , if(@rowIndex % 7 == 3 , 'ms-bgColor-sharedYellowGreen10 ms-fontColor-white' , if(@rowIndex % 7 == 4 , 'ms-bgColor-sharedCyan10 ms-fontColor-white' , if(@rowIndex % 7 == 5 , 'ms-bgColor-sharedCyanBlue10 ms-fontColor-white' , if(@rowIndex % 7 == 6 , 'ms-bgColor-sharedBlueMagenta10 ms-fontColor-white' , '')))))))" }, "children": [ { "elmType": "div", "txtContent": "[$Title]", "style": { "font-size": "30px", "font-weight": "bold" } } ] } }, "children": [ { "elmType": "div", "style": { "position": "absolute", "top": "0", "left": "0", "width": "30%", "height": "60%", "display": "=if(@rowIndex % 7 == 0 , 'none' , if(@rowIndex % 7 == 3 , 'none' , ''))" }, "attributes": { "class": "ms-bgColor-neutralPrimary" }, "customCardProps": { "openOnEvent": "click", "directionalHint": "topCenter", "isBeakVisible": false, "formatter": { "elmType": "div", "style": { "padding": "30px" }, "attributes": { "class": "=if(@rowIndex % 7 == 0 , 'ms-bgColor-sharedRed10 ms-fontColor-white' , if(@rowIndex % 7 == 1 , 'ms-bgColor-sharedOrange10 ms-fontColor-white' , if(@rowIndex % 7 == 2 , 'ms-bgColor-sharedYellow10 ms-fontColor-white' , if(@rowIndex % 7 == 3 , 'ms-bgColor-sharedYellowGreen10 ms-fontColor-white' , if(@rowIndex % 7 == 4 , 'ms-bgColor-sharedCyan10 ms-fontColor-white' , if(@rowIndex % 7 == 5 , 'ms-bgColor-sharedCyanBlue10 ms-fontColor-white' , if(@rowIndex % 7 == 6 , 'ms-bgColor-sharedBlueMagenta10 ms-fontColor-white' , '')))))))" }, "children": [ { "elmType": "div", "txtContent": "= [$Title] + '♭'", "style": { "font-size": "30px", "font-weight": "bold" } } ] } } }, { "elmType": "div", "style": { "position": "absolute", "top": "0", "right": "0", "width": "30%", "height": "60%", "display": "=if(@rowIndex % 7 == 2 , 'none' , if(@rowIndex % 7 == 6 , 'none' , ''))" }, "attributes": { "class": "ms-bgColor-neutralPrimary" }, "customCardProps": { "openOnEvent": "click", "directionalHint": "topCenter", "isBeakVisible": false, "formatter": { "elmType": "div", "style": { "padding": "30px" }, "attributes": { "class": "=if(@rowIndex % 7 == 0 , 'ms-bgColor-sharedRed10 ms-fontColor-white' , if(@rowIndex % 7 == 1 , 'ms-bgColor-sharedOrange10 ms-fontColor-white' , if(@rowIndex % 7 == 2 , 'ms-bgColor-sharedYellow10 ms-fontColor-white' , if(@rowIndex % 7 == 3 , 'ms-bgColor-sharedYellowGreen10 ms-fontColor-white' , if(@rowIndex % 7 == 4 , 'ms-bgColor-sharedCyan10 ms-fontColor-white' , if(@rowIndex % 7 == 5 , 'ms-bgColor-sharedCyanBlue10 ms-fontColor-white' , if(@rowIndex % 7 == 6 , 'ms-bgColor-sharedBlueMagenta10 ms-fontColor-white' , '')))))))" }, "children": [ { "elmType": "div", "txtContent": "= [$Title] + '#'", "style": { "font-size": "30px", "font-weight": "bold" } } ] } } } ] } ] } }