gpt4 book ai didi

javascript - 使用向上、向下、向左、向右按钮导航表格单元格

转载 作者:搜寻专家 更新时间:2023-11-01 05:29:25 24 4
gpt4 key购买 nike

我正在用 JavaScript 构建一个程序,该程序应该允许用户使用向上、向下、向左、向右按钮在表格单元格之间导航。单击方向按钮后,相应的表格单元格会突出显示。

我的表格是这样的:

我正在努力构建控制方向按钮的功能,但我对如何处理这个问题非常迷茫。我需要能够传递一个包含当前突出显示的单元格的参数,但我不知道该怎么做。

到目前为止,我的 JavaScript 并没有做太多事情:

function right() {
document.getElementById("one").nextElementSibling.style.border = '2px solid black';
}

任何关于如何处理这个问题的帮助都会很棒,因为我真的不知道该怎么做。

最佳答案

使用纯 JS 的动态解决方案

您基本上可以将表格对象存储在二维矩阵中。这样做时有两个全局坐标 X 和 Y 存储当前网格位置。您可以绑定(bind)跟踪当前焦点位置的点击事件和键盘事件。

看看 fiddle :https://jsfiddle.net/cnkr7wqa/5/

请注意,无论行大小或列大小如何,如果每一行的长度和每一列的长度都相同,则此解决方案是动态的。

另请注意,这适用于:鼠标点击、方向键盘按下和按钮按下

HTML

<table>
<tr>
<td>1</td>
<td>2</td>
<td>3</td>
</tr>
<tr>
<td>4</td>
<td>5</td>
<td>6</td>
</tr>
<tr>
<td>7</td>
<td>8</td>
<td>9</td>
</tr>
</table>

<button>Left</button>
<button>Up</button>
<button>Right</button>
<button>Down</button>

Javascript

var dat = document.getElementsByTagName('td');
var numOfColumns = document.getElementsByTagName('tr').length;
var numOfRows = document.getElementsByTagName('tr').length;
var currIndex = 0;
var rowObj = document.getElementsByTagName('tr');
var oneColLength = rowObj[0].children.length;
var colObj = document.getElementsByTagName('td');
var totalData = rowObj.length * colObj.length;
var dataCounter = 0;
var matrixObj = new Array(rowObj.length);
var currentX = 0;
var currentY = 0;
var buttons = document.getElementsByTagName('button');

for(var i = 0; i < matrixObj.length; i++){
matrixObj[i] = new Array(oneColLength);
}

for(var i = 0; i < numOfRows; i++){
for(var j = 0; j < oneColLength; j++){
matrixObj[i][j] = colObj[dataCounter++];
}
}

for(var i = 0; i < buttons.length; i++){
buttons[i].addEventListener("click",function(){
removeAllBorders();
compareBtnEntity(this);
});
}

for(var i = 0; i < dat.length; i++){
dat[i].addEventListener("click",function(){
removeAllBorders();
this.style.border = "1px solid red";
compareEntity(this);
});
}

window.addEventListener("keyup",function(e){
switch(e.keyCode){
case 37:
if(currentX > 0){
currentX--;
repaint();
}
break;
case 38:
if(currentY > 0){
currentY--;
repaint();
}
break;
case 39:
if(currentX < oneColLength-1){
currentX++;
repaint();
}
break;
case 40:
if(currentY < matrixObj.length-1){
currentY++;
repaint();
}
break;
}
})

function removeAllBorders(){
for(var i = 0; i < dat.length; i++){
dat[i].style.border = "1px solid grey";
}
}

function compareEntity(ele){
for(var i = 0; i < matrixObj.length; i++){
for(var j = 0; j < oneColLength; j++){
if(ele == matrixObj[i][j]){
currentX = j;
currentY = i;
}
}
}
}

function compareBtnEntity(ele){
for(var i = 0; i < buttons.length; i++){
if(buttons[i] == ele){
break;
}
}

switch(i){
case 0:
if(currentX > 0){
currentX--;
repaint();
}
break;
case 1:
if(currentY > 0){
currentY--;
repaint();
}
break;
case 2:
if(currentX < oneColLength-1){
currentX++;
repaint();
}
break;
case 3:
if(currentY < matrixObj.length-1){
currentY++;
repaint();
}
break;
}
repaint();
}


function repaint(){
removeAllBorders();
matrixObj[currentY][currentX].style.border = "1px solid red";
}

关于javascript - 使用向上、向下、向左、向右按钮导航表格单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36942842/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com