Уловка, с которой вы можете столкнуться, это то, что «вниз» против «вправо» против «слева» и т. Д. Например. если у вас есть контент, представленный в виде таблицы (с использованием таблицы HTML) (3х3, как в крестики-нолики), и вы находитесь в центральной ячейке ...
+-----+-----+-----+
| | 1 | |
+-----+-----+-----+
| 2 | x | 3 |
+-----+-----+-----+
| | 4 | |
+-----+-----+-----+
квадраты 1, 2, 3, 4 будут теми, к которым вы будете перемещаться, если вы нажмете вверх, влево, вправо, вниз ... но в DOM-порядке они определены в порядке 1,2,3,4
Таким образом, «down» нужно знать, чтобы пропустить «3» и перейти к «4» ... еще хуже, может быть любое количество «фокусируемых» элементов от 3 до 4, если у вас таблица большего размера. (мой простой случай - таблица 3х3, но вы можете иметь все виды узлов, подузлов, плавающих узлов и т. д.)
Пример HTML:
<table>
<tr>
<td></td>
<td>1</td>
<td></td>
</tr>
<tr>
<td>2</td>
<td>x</td>
<td>3</td>
</tr>
<tr>
<td></td>
<td>4</td>
<td></td>
</tr>
</table>
Возможно, лучше всего сделать каждый фокусируемый элемент button
, в результате чего он будет иметь (или вы можете установить) tabIndex ... и затем вы можете использовать стрелки для перехода вперед / назад (только) через управление.
В противном случае вам нужно будет создать что-то достаточно умное, чтобы «геометрически» узнать, что внизу, слева, вверх… от того, где вы находитесь.