确定哪个 table 元素被按下
determine which table element is pressed
我制作了一个 HTML table,现在我正在尝试更改被单击元素的背景颜色。问题是 table 元素的宽度不完全相同。
当我按下某些元素的角时,它会将其解释为错误的。
它并不总是将其解释为错误的,但我仍然希望它每次都能正常工作
var table = document.getElementById("table");
var wsquare = 25, hsquare = 25;
var w = window.innerWidth;
var h = window.innerHeight;
var m = parseInt(w / wsquare), n = parseInt(h / hsquare);
wsquare = w / m;
hsquare = h / n;
var col = [], pressed = [];
var starty = Math.floor(n / 2), startx = Math.floor(m / 3), endy = starty, endx = 2 * startx;
for(var i = 0; i < n; i++) {
pressed[i] = [];
col[i] = [];
var row = table.insertRow(i);
for(var j = 0; j < m; j++) {
var cell1 = row.insertCell(j);
col[i][j] = '#FFFFFF';
pressed[i][j] = 0;
}
}
var col = '#585858';
table.addEventListener('mousedown', e => {
x = Math.floor(e.clientX / wsquare);
y = Math.floor(e.clientY / hsquare);
if(!pressed[y][x]) {
table.rows[y].cells[x].style.backgroundColor = col;
pressed[y][x] = 1;
}
else {
table.rows[y].cells[x].style.backgroundColor = '#FFFFFF';
pressed[y][x] = 0;
}
});
th, table, td{
border: 1px solid black;
border-collapse: collapse;
}
table {
position: absolute;
left: 0;
top: 0;
right: 0;
bottom: 0;
width: 100%;
height: 100%;
}
* {
margin: 0;
padding: 0;
}
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<title></title>
<link rel="stylesheet" type="text/css" href="style.css">
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
<div class="" id = "all">
<div class="table">
<table id= "table">
</table>
<script type="text/javascript" src="script.js"></script>
</body>
</html>
试试这个。我在 table、th 和 td 中添加了一个 padding: 1px
。
var table = document.getElementById("table");
var wsquare = 25, hsquare = 25;
var w = window.innerWidth;
var h = window.innerHeight;
var m = parseInt(w / wsquare), n = parseInt(h / hsquare);
wsquare = w / m;
hsquare = h / n;
var col = [], pressed = [];
var starty = Math.floor(n / 2), startx = Math.floor(m / 3), endy = starty, endx = 2 * startx;
for(var i = 0; i < n; i++) {
pressed[i] = [];
col[i] = [];
var row = table.insertRow(i);
for(var j = 0; j < m; j++) {
var cell1 = row.insertCell(j);
col[i][j] = '#FFFFFF';
pressed[i][j] = 0;
}
}
var col = '#585858';
table.addEventListener('mousedown', e => {
x = Math.floor(e.clientX / wsquare);
y = Math.floor(e.clientY / hsquare);
if(!pressed[y][x]) {
table.rows[y].cells[x].style.backgroundColor = col;
pressed[y][x] = 1;
}
else {
table.rows[y].cells[x].style.backgroundColor = '#FFFFFF';
pressed[y][x] = 0;
}
});
th, table, td{
border: 1px solid black;
border-collapse: collapse;
padding: 1px; // Observe this padding
}
table {
position: absolute;
left: 0;
top: 0;
right: 0;
bottom: 0;
width: 100%;
height: 100%;
}
* {
margin: 0;
padding: 0;
}
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<title></title>
<link rel="stylesheet" type="text/css" href="style.css">
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
<div class="" id = "all">
<div class="table">
<table id= "table">
</table>
<script type="text/javascript" src="script.js"></script>
</body>
</html>
我认为这是对某些扩展的修复:
// border-collapse: collapse -> remove
border-collapse: separate;
border-spacing: 0px;
现在边框比以前粗了一点,但也许您已经知道一个很好的解决方法:)
我制作了一个 HTML table,现在我正在尝试更改被单击元素的背景颜色。问题是 table 元素的宽度不完全相同。 当我按下某些元素的角时,它会将其解释为错误的。 它并不总是将其解释为错误的,但我仍然希望它每次都能正常工作
var table = document.getElementById("table");
var wsquare = 25, hsquare = 25;
var w = window.innerWidth;
var h = window.innerHeight;
var m = parseInt(w / wsquare), n = parseInt(h / hsquare);
wsquare = w / m;
hsquare = h / n;
var col = [], pressed = [];
var starty = Math.floor(n / 2), startx = Math.floor(m / 3), endy = starty, endx = 2 * startx;
for(var i = 0; i < n; i++) {
pressed[i] = [];
col[i] = [];
var row = table.insertRow(i);
for(var j = 0; j < m; j++) {
var cell1 = row.insertCell(j);
col[i][j] = '#FFFFFF';
pressed[i][j] = 0;
}
}
var col = '#585858';
table.addEventListener('mousedown', e => {
x = Math.floor(e.clientX / wsquare);
y = Math.floor(e.clientY / hsquare);
if(!pressed[y][x]) {
table.rows[y].cells[x].style.backgroundColor = col;
pressed[y][x] = 1;
}
else {
table.rows[y].cells[x].style.backgroundColor = '#FFFFFF';
pressed[y][x] = 0;
}
});
th, table, td{
border: 1px solid black;
border-collapse: collapse;
}
table {
position: absolute;
left: 0;
top: 0;
right: 0;
bottom: 0;
width: 100%;
height: 100%;
}
* {
margin: 0;
padding: 0;
}
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<title></title>
<link rel="stylesheet" type="text/css" href="style.css">
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
<div class="" id = "all">
<div class="table">
<table id= "table">
</table>
<script type="text/javascript" src="script.js"></script>
</body>
</html>
试试这个。我在 table、th 和 td 中添加了一个 padding: 1px
。
var table = document.getElementById("table");
var wsquare = 25, hsquare = 25;
var w = window.innerWidth;
var h = window.innerHeight;
var m = parseInt(w / wsquare), n = parseInt(h / hsquare);
wsquare = w / m;
hsquare = h / n;
var col = [], pressed = [];
var starty = Math.floor(n / 2), startx = Math.floor(m / 3), endy = starty, endx = 2 * startx;
for(var i = 0; i < n; i++) {
pressed[i] = [];
col[i] = [];
var row = table.insertRow(i);
for(var j = 0; j < m; j++) {
var cell1 = row.insertCell(j);
col[i][j] = '#FFFFFF';
pressed[i][j] = 0;
}
}
var col = '#585858';
table.addEventListener('mousedown', e => {
x = Math.floor(e.clientX / wsquare);
y = Math.floor(e.clientY / hsquare);
if(!pressed[y][x]) {
table.rows[y].cells[x].style.backgroundColor = col;
pressed[y][x] = 1;
}
else {
table.rows[y].cells[x].style.backgroundColor = '#FFFFFF';
pressed[y][x] = 0;
}
});
th, table, td{
border: 1px solid black;
border-collapse: collapse;
padding: 1px; // Observe this padding
}
table {
position: absolute;
left: 0;
top: 0;
right: 0;
bottom: 0;
width: 100%;
height: 100%;
}
* {
margin: 0;
padding: 0;
}
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<title></title>
<link rel="stylesheet" type="text/css" href="style.css">
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
<div class="" id = "all">
<div class="table">
<table id= "table">
</table>
<script type="text/javascript" src="script.js"></script>
</body>
</html>
我认为这是对某些扩展的修复:
// border-collapse: collapse -> remove
border-collapse: separate;
border-spacing: 0px;
现在边框比以前粗了一点,但也许您已经知道一个很好的解决方法:)