Web Components Tree Grid キーボード ナビゲーション
Web Components Tree Grid の Ignite UI for Web Components キーボード ナビゲーションは、さまざまなキーボード操作をユーザーに提供します。これにより IgcTreeGridComponent
のアクセシビリティが向上し、内部の要素 (セル、行、列ヘッダー、ツールバー、フッターなど) をナビゲートできるようになります。この機能はデフォルトで有効になっています。デフォルトの動作を簡単にオーバーライドするオプションがあります。
IgcTreeGridComponent
のタブが削減され、ナビゲーションが W3C のアクセシビリティ標準に準拠し、使いやすくなりました。
現在、IgcTreeGridComponent
には以下のタブ位置が導入されています。
- グループ化またはツールバーの領域 (有効な場合)
- Tree Grid ヘッダー
- Tree Grid 本体
- 列の集計 (有効な場合)
- Tree Grid ページネーター (有効な場合)
[!Note] この変更のため、Tab と Shift + Tab キーでセル間を移動することは
IgcTreeGridComponent
でサポートされなくなりました。 Tab キーを押すと、グループ化 / ツール バー -> ヘッダー -> 本体 -> 集計 -> フッター/ページネーターの順序にタブ位置を移動します。
[!Note] テンプレートによっフォーカス可能な要素を
IgcTreeGridComponent
の本体に公開すると、ブラウザのデフォルトの動作が防止されていないため、予期されない結果が発生する可能性があります。 したがって、それを適切に防止/変更するのは開発者の責任です。
ヘッダー ナビゲーション
IgcTreeGridComponent
ヘッダーのキーボード ナビゲーションが完全にサポートされるようになりました。列ヘッダーは矢印キーで簡単にトラバースできます。さらに、フィルタリング、ソート、グループ化などの列操作をトリガーするキーの組み合わせがいくつかあります。
IgcTreeGridComponent
ヘッダー コンテナーがフォーカスされている場合、以下のキー組み合わせを使用できます。
キーの組み合わせ
↑ - ヘッダーで 1 つ上のセルへ移動 (ループなし)複数行レイアウトまたは複数列ヘッダーが定義されている場合のみ使用できます。
↓ - ヘッダーの 1 つ下のセルに移動 (ラッピングなし)複数行レイアウトまたは複数列ヘッダーが定義されている場合のみ使用できます。
← - 1 つ左のセルへ移動 (ループなし)
→ - 1 つ右のセルへ移動 (行間のラッピングなし)
Ctrl + ← - 行の左端のセルへ移動; 複数行レイアウトまたは複数列ヘッダーが有効な場合、同じレベルの左端のセルへ移動
Home - 行の左端のセルへ移動; 複数行レイアウトまたは複数列ヘッダーが有効な場合、同じレベルの左端のセルへ移動
Ctrl + → - 行の右端のセルへ移動; 複数行レイアウトまたは複数列ヘッダーが有効な場合、同じレベルの右端のセルへ移動
End - 行の右端のセルへ移動; 複数行レイアウトまたは複数列ヘッダーが有効な場合、同じレベルの右端のセルへ移動
Alt + L - 詳細フィルタリングが有効な場合、詳細フィルタリング ダイアログを開きます。
Ctrl + Shift + L - 列がフィルター可能な場合、Excel スタイル フィルターまたはデフォルト (行) フィルターを開きます。
Ctrl + ↑ - アクティブな列ヘッダーを昇順にソートします。列が昇順で既にソートされている場合、ソート状態を削除します。
Ctrl + ↓ - アクティブな列ヘッダーを降順にソートします。列が降順で既にソートされている場合、ソート状態を削除します。
Space - 列を選択します。列がすでに選択されている場合、選択を解除します。
Shift + Alt + → - 列がグループ化可能としてマークされている場合、列のグループ化を解除します。
Alt + ← または Alt + ↑ - 列が縮小されていない場合、列グループ ヘッダーを縮小します。
Alt + → または Alt + ↓ - 列がまだ展開されていない場合、列グループヘッダーを展開します。
本体ナビゲーション
IgcTreeGridComponent
本体がフォーカスされている場合、以下のキー組み合わせを使用できます。
キーの組み合わせ
- ↑ - 1 つ上のセルへ移動。
- ↓ - 1 つ下のセルへ移動。
- ← - 1 つ左のセルへ移動 (行間のラッピングなし)
- → - 1 つ右のセルへ移動 (行間のラッピングなし)
- Ctrl + ← - 行の左端のセルへ移動
- Ctrl + → - 行の右端のセルへ移動
- Ctrl + ↑ - 列の最初のセルへ移動
- Ctrl + ↓ - 列の最後のセルへ移動
- Home - 行の左端のセルへ移動
- End - 行の右端のセルへ移動
- Ctrl + Home - グリッドの最も左上のデータ セルへ移動
- Ctrl + End - グリッドの最も右下のデータ セルへ移動
- Page Up - 1 ページ (ビューポート) 上へスクロール
- Page Down - 1 ページ (ビューポート) 下へスクロール
- Enter - 編集モードに入る
- F2 - 編集モードに入る
- Esc - 編集モードを終了する
- Tab - 編集モードのセルがある場合のみ使用できます。行の次の編集可能なセルにフォーカスを移動します。行の最後のセルに達した場合、フォーカスを次の行の最初の編集可能なセルに移動します。行編集が有効な場合、フォーカスを編集可能な一番右のセルから [キャンセル] および [完了] ボタンへ移動し、[完了] ボタンから行の一番左の編集可能なセルへ移動します。
- Shift + Tab - 編集モードのセルがある場合のみ使用できます。行の一つ前の編集可能なセルにフォーカスを移動します。行の最初のセルに達した場合、フォーカスを前の行の最後の編集可能なセルに移動します。行編集が有効な場合、フォーカスを編集可能な一番右のセルから [キャンセル] および [完了] ボタンへ移動し、[完了] ボタンから行の一番右の編集可能なセルへ移動します。
- Space - 行の選択が有効な場合、行を選択します。
- Alt + ← または Alt + ↑ -
現在のノードを縮小します。
- Alt + → または Alt + ↓ - グループ行はグループを展開します。
現在のノードを展開します。
以下のデモサンプルで上記のすべての操作を実行できます。ナビゲーション可能なグリッド要素をフォーカスすると、利用可能な操作のリストが表示されます。
デモ
カスタム キーボード ナビゲーション
特定のキーまたはキーの組み合わせのデフォルトの動作をオーバーライドすることができるは、キーボード ナビゲーション機能の利点の 1 つです。たとえば、Enter キーまたは Tab キーを押して次のセルまたは下のセルへ移動します。 この以外のナビゲーションシナリオでも、Keyboard Navigation API で簡単に実現できます。
API | 説明 | 引数 |
---|---|---|
GridKeydown |
上記のキー押下やキー押下の組み合わせのいずれかが実行されたときに発生されるイベント。キャンセルできます。その他のキーの押下/組み合わせには、デフォルトの onkeydown イベントを使用します。 |
IgcGridKeydownEventArgs |
ActiveNodeChange |
アクティブ ノードが変更されたときに発行されるイベント。これを使用して、アクティブ フォーカス位置 (ヘッダー、tbody など)、列インデックス、行インデックス、またはネストされたレベルを決定できます。 | IgcActiveNodeChangeEventArgs |
NavigateTo |
提供された Rowindex と VisibleColumnIndex に基づいてグリッド内の位置に移動します。{ targetType: GridKeydownTargetType, target: Object } タイプのパラメーターを受け入れるコールバック関数を通してターゲット要素上でカスタム ロジックを実行することもできます。使用方法: grid.navigateTo(10, 3, (args) => { args.target.nativeElement.focus(); }); |
RowIndex: number, VisibleColumnIndex: number, callback: ({ targetType: GridKeydownTargetType, target: Object } ) => {} |
GetNextCell |
RowIndex と VisibleColumnIndex で次のセルを定義する ICellPosition オブジェクトを返します。コールバック関数は、GetNextCell メソッドの 3 番目のパラメーターとして渡すことができます。コールバック関数は、パラメーターとして IgcColumnComponent を受け取り、指定された条件が満たされた場合に boolean 値を返します: const nextEditableCell = grid.getNextCell(0, 4, (col) => col.editable); |
currentRowIndex: number, currentVisibleColumnIndex: number, callback: (Column) => boolean |
GetPreviousCell |
RowIndex と VisibleColumnIndex で前のセルを定義する ICellPosition オブジェクトを返します。コールバック関数は、GetPreviousCell メソッドの 3 番目のパラメーターとして渡すことができます。コールバック関数は、パラメーターとして IgcColumnComponent を受け取り、指定された条件が満たされた場合に boolean 値を返します: const prevEditableCell = grid.getPreviousCell(0, 4, (col) => col.editable); |
CurrentRowIndex: number, CurrentVisibleColumnIndex: number, callback: (Column) => boolean |
API を使用して、ユーザー入力の検証やカスタム ナビゲーションなどの一般的なシナリオを実現する方法を示します。最初に、GridKeydown
イベントのイベント ハンドラーを登録する必要があります。
<igc-tree-grid id="grid1" primary-key="ProductID">
</igc-tree-grid>
constructor() {
var grid = this.grid = document.getElementById('grid') as IgcTreeGridComponent;
grid.data = this.data
grid.addEventListener("gridKeydown", this.customKeydown);
}
イベント引数の値に基づいて、独自のロジックを提供する 2つ のケースを識別しました (上記を参照)。API のメソッドを使用して、目的の処理を実行しましょう。ユーザーが編集モードでセル上で Tab キーを押している場合、入力の検証を実行します。ユーザーがセル上で Enter キーを押すと、次の行のセルへフォーカスを移動します。
// 1. USER INPUT VALIDATION ON TAB
if (target.column.dataType === 'number' && target.editValue < 10) {
// alert the user that the input is invalid
return;
}
// 2. CUSTOM NAVIGATION ON ENTER KEY PRESS
this.grid1.navigateTo(target.row.index + 1, target.column.visibleIndex, (obj) => {
obj.target.activate();
});
[!Note] 実装の詳細は、サンプルコードを参照してください。
実装したカスタム シナリオを試すには以下のデモを使用してください。
- 数値列のセルをダブルクリックするか F2 キーを押し、値を 7 に変更して Tab キーを押します。プロンプト メッセージが表示されます。
- セルを選択して Enter キー を数回押します。キーを押すたびに、同じ列の下にある次の行のセルへフォーカスを移動します。
デモ
既知の問題と制限
制限 | 説明 |
---|---|
スクロール可能な親コンテナーを使用してグリッド内を移動します。 | グリッドがスクロール可能な親コンテナー内に配置され、ユーザーが表示されていないグリッドのセルへ移動した場合、親コンテナーはスクロールされません。 |
その他のリソース
コミュニティに参加して新しいアイデアをご提案ください。