создание сетки с использованием элемента таблицы - PullRequest
0 голосов
/ 11 марта 2020

Я пытаюсь создать сетку из элемента таблицы, а затем позволить пользователю раскрасить ее. Теперь я застрял в создании таблицы, я добавил l oop, который будет добавлять элемент строки и элемент ячейки, но по какой-то причине таблица не будет создана. Может кто-нибудь, пожалуйста, укажите мне в правильном направлении?

my HTML:

<!DOCTYPE html>
<html lang="en">
<head>
    <title>Pixel Art Maker!</title>
    <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Monoton">
    <link rel="stylesheet" href="styles.css">
</head>
<body>
    <h1>Pixel Art Maker</h1>

    <h2>Choose Grid Size</h2>
    <form id="sizePicker">
        Grid Height:
        <input type="number" id="inputHeight" name="height" min="1" value="1">
        Grid Width:
        <input type="number" id="inputWidth" name="width" min="1" value="1">
        <input type="submit">
    </form>

    <h2>Pick A Color</h2>
    <input type="color" id="colorPicker">

    <h2>Design Canvas</h2>
    <table id="pixelCanvas"></table>

    <script src="designs.js"></script>
</body>
</html>

, а my javascript:

// Select color input
var color = document.getElementById("colorPicker").value;
// Select size input
var height = document.getElementById("inputHeight").value;
var width = document.getElementById("inputWidth").value;
// When size is submitted by the user, call makeGrid()
document.querySelector('#sizePicker').addEventListener('submit', function (evt) {
    if (evt.target.nodeName.toLowerCase() === 'submit') {  // ← verifies target is desired element

        makeGrid(height,width);
    }
});
//add addEventListener to color eatch cell
function makeGrid(height,width) {
const mainTable = document.querySelector('#pixelCanvas');

for (let i = 0 ; i <= height ; i++){
  mainTable.insertAdjacentHTML('afterend', document.createElement('tr'));
      for (let x = 0; x <= width ; x++){
        mainTable.insertAdjacentHTML('afterbegin',document.createElement('td'));
      }
}


}

my css:

body {
    text-align: center;
}

h1 {
    font-family: Monoton;
    font-size: 70px;
    margin: 0.2em;
}

h2 {
    margin: 1em 0 0.25em;
}

h2:first-of-type {
    margin-top: 0.5em;
}

table,
tr,
td {
    border: 1px solid black;
}

table {
    border-collapse: collapse;
    margin: 0 auto;
}

tr {
    height: 20px;
}

td {
    width: 20px;
}

input[type=number] {
    width: 6em;
}

1 Ответ

0 голосов
/ 11 марта 2020

Вам необходимо запретить действие отправки формы при нажатии на кнопку.

Манипулирование DOM стоит дорого. Поэтому вам нужно сначала создать блок элементов, прежде чем добавить его на страницу HTML. В противном случае это приведет к снижению производительности.

// Select color input
var colorEl = document.getElementById("colorPicker");
// Select size input
var heightEl = document.getElementById("inputHeight");
var widthEl = document.getElementById("inputWidth");
// When size is submitted by the user, call makeGrid()
document.querySelector('#sizePicker').addEventListener('submit', function(evt) {
  evt.preventDefault()
  const height = heightEl.value;
  const width = widthEl.value;
  const color = colorEl.value;
  
  makeGrid(height, width);

});
//add addEventListener to color eatch cell
function makeGrid(height, width) {
  const mainElement = document.querySelector('#pixelCanvas');
  // Your code goes here!
  const tableElement = document.createElement('table');
  for (let i = 0; i < height; i++) {

    const trElement = document.createElement('tr');
    for (let x = 0; x < width; x++) {
      trElement.appendChild(document.createElement('td'));
    }

    tableElement.appendChild(trElement);

  }
  mainElement.innerHTML = '';
  mainElement.appendChild(tableElement);


}
td {
  width: 20px;
  height:20px;
  background: red;
}
<!DOCTYPE html>
<html lang="en">
<head>
    <title>Pixel Art Maker!</title>
    <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Monoton">
    <link rel="stylesheet" href="styles.css">
</head>
<body>
    <h1>Pixel Art Maker</h1>

    <h2>Choose Grid Size</h2>
    <form id="sizePicker">
        Grid Height:
        <input type="number" id="inputHeight" name="height" min="1" value="1">
        Grid Width:
        <input type="number" id="inputWidth" name="width" min="1" value="1">
        <input type="submit">
    </form>

    <h2>Pick A Color</h2>
    <input type="color" id="colorPicker">

    <h2>Design Canvas</h2>
    <div id="pixelCanvas"></div>

    <script src="designs.js"></script>
</body>
</html>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...