我知道标题看起来有点奇怪,但我试图创建一个绘图应用程序。我有一个由36生成的JavaScript生成的表格,我试图做到这一点,只要你点击一个盒子,它就会将它染成黑色。下面是代码(在这里,因为他们是30×30像素不是它的行为怪异)clientY不显示正确的东西
var array = [];
var body = document.body, tbl = document.createElement("table");
tbl.style.border = "1px solid black";
tbl.style.borderCollapse = "collapse";
tbl.setAttribute("border", "1px");
tbl.style.margin = "0px";
tbl.setAttribute("onClick", "color(event)");
var id = 1;
for (var j = 0; j < 17; j++) {
\t var row = tbl.insertRow();
\t row.setAttribute("id", id.toString());
\t id++;
\t for (var ij = 0; ij < 36; ij++) {
\t \t var cell = row.insertCell();
\t \t cell.style.width = "28px";
\t \t cell.style.height = "28px";
\t }
}
body.appendChild(tbl);
function color(event) {
\t var x = event.clientX;
\t var y = event.clientY;
\t console.log(x + " = x");
\t console.log(y + " = y");
\t console.log((x/30) + " = x/30");
\t console.log((y/30) + " = y/30");
\t x = Math.ceil(x/30);
\t y = Math.ceil(y/30);
\t if (x == 37) {x = 36}
\t if (y == 18) {y = 17}
\t console.log(x + "x after");
\t console.log(y + "y after");
\t document.getElementById(y.toString()).childNodes[x - 1].style.background = "black";
}
<!DOCTYPE html>
<html>
\t <head>
\t \t <title>Program</title>
\t \t <style>
\t \t \t body {
\t \t \t \t margin: 0px;
\t \t \t }
\t \t </style>
\t </head>
\t <body>
\t \t <script src="program.js"></script>
\t \t <button onClick="calculate()"></button>
\t </body>
</html>
当我第10行中单击一个正方形,它的颜色是黑色。当我在靠近底部的一排点击它时,从第13行开始,它向上移动5格。另外,如果我点击一个广场的后半部分(从左侧或从顶部),它认为它是下一个广场!请帮忙!
尝试event.pageX && event.pageY – Eric
事件对象将包含一个链接到被单击的TD,您不需要搜索它。如果要搜索,请在计算偏移量时介意单元格的填充,边框和间距... – dandavis
另外,您没有设置表格的大小,是否没有注意到“像素”不是真的广场?而且表格不是从页面顶部开始的,在它之前有一个复选框。所以你需要从你的计算中减去表格的位置。 – Jan