首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >按一下,按钮就会向下移动,为什么会这样呢?

按一下,按钮就会向下移动,为什么会这样呢?
EN

Stack Overflow用户
提问于 2021-06-04 12:07:20
回答 2查看 69关注 0票数 1

每当我单击一个按钮并输入该值时,框中的值就会下降。我尝试过改变一些CSS,但它并不像我想要的那样工作。

代码语言:javascript
运行
复制
const game = (() => {
  const createPlayer = (name, marker, turn) => {
    return { name, marker, turn }
  }

  player1 = createPlayer('Player 1', "x", true)
  player2 = createPlayer('Player 2', "o", false)

  const gameBoard = () => {
    var gameBoard = []

    const movement = (e) => {
      if (player1.turn === true && e.target.textContent === "") {
        gameBoard[e.target.id] = player1.marker
        e.target.textContent = player1.marker
        player1.turn = false
      } else if (player1.turn === false && e.target.textContent === "") {
        gameBoard[e.target.id] = player2.marker
        e.target.textContent = player2.marker
        player1.turn = true
      }
      if (gameBoard["button-1"] === "x" && gameBoard["button-2"] === "x" && gameBoard["button-3"] === "x") {
        alert("perfect")
      } else if (gameBoard["button-4"] === "x" && gameBoard["button-5"] === "x" && gameBoard["button-6"] === "x") {
        alert("you win")
      } else if (gameBoard["button-7"] === "x" && gameBoard["button-8"] === "x" && gameBoard["button-9"] === "x") {
        alert("you win")
      } else if (gameBoard["button-1"] === "x" && gameBoard["button-4"] === "x" && gameBoard["button-7"] === "x") {
        alert("you win")
      } else if (gameBoard["button-2"] === "x" && gameBoard["button-5"] === "x" && gameBoard["button-8"] === "x") {
        alert("you win")
      } else if (gameBoard["button-3"] === "x" && gameBoard["button-6"] === "x" && gameBoard["button-9"] === "x") {
        alert("you win")
      } else if (gameBoard["button-1"] === "o" && gameBoard["button-2"] === "o" && gameBoard["button-3"] === "o") {
        alert("perfect")
      } else if (gameBoard["button-4"] === "o" && gameBoard["button-5"] === "o" && gameBoard["button-6"] === "o") {
        alert("you win")
      } else if (gameBoard["button-7"] === "o" && gameBoard["button-8"] === "o" && gameBoard["button-9"] === "o") {
        alert("you win")
      } else if (gameBoard["button-1"] === "o" && gameBoard["button-4"] === "o" && gameBoard["button-7"] === "o") {
        alert("you win")
      } else if (gameBoard["button-2"] === "o" && gameBoard["button-5"] === "o" && gameBoard["button-8"] === "o") {
        alert("you win")
      } else if (gameBoard["button-3"] === "o" && gameBoard["button-6"] === "o" && gameBoard["button-9"] === "o") {
        alert("you win")
      } else if (gameBoard["button-1"] === "o" && gameBoard["button-5"] === "o" && gameBoard["button-9"] === "o") {
        alert("you win")
      } else if (gameBoard["button-3"] === "o" && gameBoard["button-5"] === "o" && gameBoard["button-7"] === "o") {
        alert("you win")
      } else if (gameBoard["button-1"] === "x" && gameBoard["button-5"] === "x" && gameBoard["button-9"] === "x") {
        alert("you win")
      } else if (gameBoard["button-3"] === "x" && gameBoard["button-5"] === "x" && gameBoard["button-7"] === "x") {
        alert("you win")
      }

    }

    const board = document.querySelector('.item-board').addEventListener('click', movement)
  }

  gameBoard()
})

game()
代码语言:javascript
运行
复制
.header {
  background-color: red;
  background-size: cover;
  width: 100%;
  height: 100%;
}
.item-board {
  margin-left: 200px;
  display: inline-block;
}
.TicTac {
  background-size: cover;
  width: 100%;
  height: 100%;
}
.btn-1 {
  width: 100px;
  height: 100px;
  border: 2px solid;
  margin: -2px;
  font-size: 4rem;
  padding: 0px;
}
p {
  font-size: 200px;
}
代码语言:javascript
运行
复制
<header class="header">
  <h1 class="TicTac">Tic-Tac-Toe</h1>
</header>
<div class="item-board">
  <div class="item-board">
    <button type="button" name="button" id="button-1" class="btn-1"></button>
    <button type="button" name="button" id="button-2" class="btn-1"></button>
    <button type="button" name="button" id="button-3" class="btn-1"></button>
  </div>
  <div class="item-board">
    <button type="button" name="button" id="button-4" class="btn-1"></button>
    <button type="button" name="button" id="button-5" class="btn-1"></button>
    <button type="button" name="button" id="button-6" class="btn-1"></button>
  </div>
  <div class="item-board">
    <button type="button" name="button" id="button-7" class="btn-1"></button>
    <button type="button" name="button" id="button-8" class="btn-1"></button>
    <button type="button" name="button" id="button-9" class="btn-1"></button>
  </div>
</div>

我尝试过更改一些CSS,但无法弄清楚如何使它不会在每次单击时下降。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-06-04 12:14:03

您的.btn-1样式是根据元素的文本内容对齐元素,这可以通过将vertical-align: top;应用于该类来解决。

另一个值得做的小更改是将.item-boardinline-block更改为display: block,因为这将防止屏幕的宽度影响行是否换行。

代码语言:javascript
运行
复制
const game = (() => {
  const createPlayer = (name, marker, turn) => {
    return { name, marker, turn }
  }

  player1 = createPlayer('Player 1', "x", true)
  player2 = createPlayer('Player 2', "o", false)

  const gameBoard = () => {
    var gameBoard = []

    const movement = (e) => {
      if (player1.turn === true && e.target.textContent === "") {
        gameBoard[e.target.id] = player1.marker
        e.target.textContent = player1.marker
        player1.turn = false
      } else if (player1.turn === false && e.target.textContent === "") {
        gameBoard[e.target.id] = player2.marker
        e.target.textContent = player2.marker
        player1.turn = true
      }
      if (gameBoard["button-1"] === "x" && gameBoard["button-2"] === "x" && gameBoard["button-3"] === "x") {
        alert("perfect")
      } else if (gameBoard["button-4"] === "x" && gameBoard["button-5"] === "x" && gameBoard["button-6"] === "x") {
        alert("you win")
      } else if (gameBoard["button-7"] === "x" && gameBoard["button-8"] === "x" && gameBoard["button-9"] === "x") {
        alert("you win")
      } else if (gameBoard["button-1"] === "x" && gameBoard["button-4"] === "x" && gameBoard["button-7"] === "x") {
        alert("you win")
      } else if (gameBoard["button-2"] === "x" && gameBoard["button-5"] === "x" && gameBoard["button-8"] === "x") {
        alert("you win")
      } else if (gameBoard["button-3"] === "x" && gameBoard["button-6"] === "x" && gameBoard["button-9"] === "x") {
        alert("you win")
      } else if (gameBoard["button-1"] === "o" && gameBoard["button-2"] === "o" && gameBoard["button-3"] === "o") {
        alert("perfect")
      } else if (gameBoard["button-4"] === "o" && gameBoard["button-5"] === "o" && gameBoard["button-6"] === "o") {
        alert("you win")
      } else if (gameBoard["button-7"] === "o" && gameBoard["button-8"] === "o" && gameBoard["button-9"] === "o") {
        alert("you win")
      } else if (gameBoard["button-1"] === "o" && gameBoard["button-4"] === "o" && gameBoard["button-7"] === "o") {
        alert("you win")
      } else if (gameBoard["button-2"] === "o" && gameBoard["button-5"] === "o" && gameBoard["button-8"] === "o") {
        alert("you win")
      } else if (gameBoard["button-3"] === "o" && gameBoard["button-6"] === "o" && gameBoard["button-9"] === "o") {
        alert("you win")
      } else if (gameBoard["button-1"] === "o" && gameBoard["button-5"] === "o" && gameBoard["button-9"] === "o") {
        alert("you win")
      } else if (gameBoard["button-3"] === "o" && gameBoard["button-5"] === "o" && gameBoard["button-7"] === "o") {
        alert("you win")
      } else if (gameBoard["button-1"] === "x" && gameBoard["button-5"] === "x" && gameBoard["button-9"] === "x") {
        alert("you win")
      } else if (gameBoard["button-3"] === "x" && gameBoard["button-5"] === "x" && gameBoard["button-7"] === "x") {
        alert("you win")
      }

    }

    const board = document.querySelector('.item-board').addEventListener('click', movement)
  }

  gameBoard()
})

game()
代码语言:javascript
运行
复制
.header {
  background-color: red;
  background-size: cover;
  width: 100%;
  height: 100%;
}
.item-board {
  margin-left: 50px;
  display: block; /* This prevents the rows appearing on the same line on wide screens */
}
.TicTac {
  background-size: cover;
  width: 100%;
  height: 100%;
}
.btn-1 {
  width: 100px;
  height: 100px;
  border: 2px solid;
  margin: -2px;
  font-size: 4rem;
  padding: 0px;
  vertical-align: top; /* Top will fix the alignment issue when text content is added to the button */
}
p {
  font-size: 200px;
}
代码语言:javascript
运行
复制
<header class="header">
  <h1 class="TicTac">Tic-Tac-Toe</h1>
</header>
<div class="item-board">
  <div class="item-board">
    <button type="button" name="button" id="button-1" class="btn-1"></button>
    <button type="button" name="button" id="button-2" class="btn-1"></button>
    <button type="button" name="button" id="button-3" class="btn-1"></button>
  </div>
  <div class="item-board">
    <button type="button" name="button" id="button-4" class="btn-1"></button>
    <button type="button" name="button" id="button-5" class="btn-1"></button>
    <button type="button" name="button" id="button-6" class="btn-1"></button>
  </div>
  <div class="item-board">
    <button type="button" name="button" id="button-7" class="btn-1"></button>
    <button type="button" name="button" id="button-8" class="btn-1"></button>
    <button type="button" name="button" id="button-9" class="btn-1"></button>
  </div>
</div>

票数 2
EN

Stack Overflow用户

发布于 2021-06-04 13:09:08

尝试为您的板使用grid布局。

  • 我清理了CSS,这样就更容易理解了。我还制作了一个数组,并添加了一个indicies.
  • Cells计数器。elements.
  • The元素
  • 现在被传递给了函数。当使用
  • 单元时,查找变得更容易了。现在使用
  • 单元数据集(属性)保存了marker reference.
  • The单元数据集(attributes),现在也更容易了。

H 118单元单击是由板委派的。H 219f 220

希望这更容易理解。我试着保持你职能的总体结构。

代码语言:javascript
运行
复制
const game = ((el) => {
  const createPlayer = (name, marker) =>
    ({ name, marker });
  
  let turn = 0;
  const players = [
    createPlayer('Player 1', 'X'),
    createPlayer('Player 2', 'O')
  ];

  const gameBoard = () => {
    var gameBoard = [];
    
    const getCell = index => el.querySelector(`.cell:nth-child(${index + 1})`);
    const getCells = (...indicies) => indicies.map(getCell);
    const allOccupied = (marker, ...indicies) =>
      getCells(...indicies).every(cell => cell.dataset.marker === marker);

    const checkWin = ({ marker }) =>
          allOccupied(marker, 0, 1, 2)  /* horiz / top */
       || allOccupied(marker, 3, 4, 5)  /* horiz / middle */
       || allOccupied(marker, 5, 7, 8)  /* horiz / bottom */
       || allOccupied(marker, 0, 3, 6)  /* vert  / left */
       || allOccupied(marker, 1, 4, 7)  /* vert  / middle */
       || allOccupied(marker, 2, 5, 8)  /* vert  / right */
       || allOccupied(marker, 0, 4, 8)  /* diag  / negative */
       || allOccupied(marker, 2, 4, 6); /* diag  / positive */

    const delagateClick = (e) => {
      if (e.target.classList.contains('cell')) {
        handleMovement(e.target);
      }
    };
    
    const handleMovement = (cell) => {
      const player = players[turn % players.length];
      if (!cell.dataset.marker) {
        cell.dataset.marker = player.marker;
        cell.textContent = player.marker;
        if (checkWin(player)) {
          setTimeout(() => {
            alert(`${player.name} ("${player.marker}") wins`);
          }, 100);
        }
        turn++;
      }
    };

    el.addEventListener('click', delagateClick);
  }

  gameBoard()
})

game(document.querySelector('.board'));
代码语言:javascript
运行
复制
html, body {
  width: 100%;
  height: 100%;
  margin: 0;
  padding: 0;
}

body {
  display: flex;
  flex-direction: column;
  align-items: center;
  font-family: Arial;
  background: #000;
  color: #EEE;
}

header {
  display: flex;
  justify-content: center;
  align-items: center;
  background-color: #C33;
  background-size: cover;
  width: 100%;
  height: 4em;
}

header > div {
  font-size: 2em;
  font-weight: bold;
}

main {
  display: flex;
  flex: 1;
  align-items: center;
  justify-content: center;
  background: #222;
  width: 100%;
}

.board {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  grid-gap: 0.25em;
  border: thin solid grey;
  background: #444;
  padding: 0.25em;
}

.cell {
  display: flex;
  width: 2em;
  height: 2em;
  border: thin solid grey;
  font-size: 2em;
  align-items: center;
  justify-content: center;
  background: #666;
  cursor: pointer;
}

.cell:not([data-marker]):hover {
  background: #888;
}

.cell[data-marker] {
  cursor: not-allowed;
}
代码语言:javascript
运行
复制
<header>
  <div>Tic-Tac-Toe</div>
</header>
<main>
  <div class="board">
    <div class="cell"></div>
    <div class="cell"></div>
    <div class="cell"></div>
    <div class="cell"></div>
    <div class="cell"></div>
    <div class="cell"></div>
    <div class="cell"></div>
    <div class="cell"></div>
    <div class="cell"></div>
  </div>
</main>

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67836957

复制
相关文章

相似问题

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