使用table元素创建网格



我正在尝试从一个table元素创建一个网格,然后让用户给它上色。我现在一直在创建这个表,我添加了一个循环,它将附加行元素和单元格元素,但由于某种原因,表无法创建。有人能给我指正确的方向吗?

我的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>

我的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'));
}
}

}

我的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;
}

单击按钮时需要阻止提交表单操作。

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>

最新更新