首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果相邻单元格有类,如何签入css网格

如果相邻单元格有类,如何签入css网格
EN

Stack Overflow用户
提问于 2022-07-13 11:50:41
回答 1查看 47关注 0票数 1

我试着用html、css和javascript创建一个简单的游戏来练习(我正在学习)。我有一个网格:

烧烤游戏

我想要实现的是,当你点击一个细胞,它变成绿色,但只有当一个相邻的细胞已经绿色。但如果这个细胞有“死亡”类,那么它就变红了。

我知道我可以手工编写每个细胞的代码,就像这样:

代码语言:javascript
复制
b21.addEventListener("click", () => {
if ((b11.classList.contains("green") || b31.classList.contains("green") || 
b22.classList.contains("green")) && !(b21.classList.contains("death")))
    b21.classList.add("green");
else if (b21.classList.contains("death"))
    b21.classList.add("red");

})

我肯定还有更好的办法。更优雅更实用但我不知道怎么做。我需要在单击事件中检查哪些类有相邻的单元格。

谢谢!!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-07-13 12:56:13

你可以这样做:

创建一个对象数组,其中定义相邻的单元格和单元格本身。

代码语言:javascript
复制
const grid = [
  { 
    adjacentCells: ['b12', 'b21'],
    cell: b11, //DOM element
    id: 'b11',
  },
  {
    adjacentCells: ['b11', 'b13', 'b22'],
    cell: b12,
    id: 'b12',
  },
  ...
]

然后迭代数组并将eventListener添加到每个DOM元素中:

代码语言:javascript
复制
grid.forEach((element) => {
  element.cell.addEventListener("click", function establishColor() {
    if (this.classList.contains("death")) {
      this.classList.add("red");
    } else {
      element.adjacentCells.forEach((e) => {
        const selectedCell = grid.find((cell) => cell.id === e);
        if (selectedCell && selectedCell.cell.classList.contains("green") && !this.classList.add("green")) {
          this.classList.add("green");
        }
      });
    }
  });
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72965791

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档