我正在尝试创建一个配对游戏。我已经用要匹配的元素创建了左右 td。中间的 td 包含一个 Canvas 。
当有正确匹配时,我想在 Canvas 上画线来匹配项目。为此,我需要每张图片的坐标,然后在 Canvas 中相应地绘制它。下面是示意图
红色代表td 绿色代表我想画的线
x 坐标没有太大问题,因为我只取 Canvas 的宽度 (300px)(从 0 到 300 绘制),但问题是 y 坐标。
我的想法是
找到图片1的y坐标
添加 picture1 的一半像素,使其位于 picture1 的“中心”
对图片2做同样的事情
使用这些坐标画线
有没有办法找到表格中图片的y坐标,因为它与 Canvas 的y坐标相等?
HTML
<table class="first">
<tr>
<td>
<ul class="firstleft"></ul>
</td>
<td>
<canvas id="myCanvas" resize></canvas>
</td>
<td>
<ul class="firstright"></ul>
</td>
</tr>
</table>
CSS
table {
margin-left: auto;
margin-right: auto;
}
table ul {
list-style-type: none;
margin-left: 50px;
padding: 0;
padding-left: 5px;
width: 200px;
}
JS
var canvas = document.getElementById('myCanvas');
ctx = canvas.getContext("2d")
ctx.lineWidth = 6;
ctx.strokeStyle = "#333";
/* Drawing part using an example*/
ctx.beginPath();
ctx.moveTo(100, 250);
ctx.bezierCurveTo(150, 100, 350, 100, 400, 250);
ctx.stroke();
最佳答案
这是一个过于冗长的代码块,没有简化代码以加强清晰度。它也只处理左侧,但显然您会更改函数以将名称和位置数组作为参数,以支持左侧和右侧等。
var yPositionForMiddleOfEachImage = [];
var myImageNames = ['leftImage0', 'leftImage1', 'leftImage2']; //etc
var calculateYValuesForLeftSide = function () {
var thisImagesHeight = 0, halfOfImageHeight = 0, totalOfAllPreviousImagesHeight = 0;
for (var i = 0; i < myImageNames.length; i++) {
thisImagesHeight = document.getElementById(myImageNames[i]).clientHeight;
halfOfImageHeight = thisImagesHeight / 2;
yPositionForMiddleOfEachImage.push(totalOfAllPreviousImagesHeight + halfOfImageHeight);
totalOfAllPreviousImagesHeight += thisImagesHeight;
}
};
var getCanvasLeftSideYPosition = function (imgPosition) {
return yPositionForMiddleOfEachImage[imgPosition];
};
关于html - 在表格单元格中查找每张图片的 X 和 Y 坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35347642/