如何将两个大小相同的画布叠放在一起?

12
下面是代码。我希望将movementCanvas放在canvas下面。
<html>
<head>
  <script type="text/javascript" src="game.js"></script>
</head>
<body>

  <canvas id="canvas" width="710" height="597" style="border:1px solid #c3c3c3;">
    <p>Your browser doesn't support canvas!</p>
  </canvas>

  <canvas id="movementCanvas" width="710" height="597" style="border:1px solid #c3c3c3;">
  </canvas>

</body>
</html>

第二个问题。在更高的层次上,我试图隐藏下面的画布。movementCanvas是一个彩色编码的地图,在点击时我将查找那里的值,访问像素的唯一方法是使用HTML5画布和上下文。顶部的“画布”是前端,应该看起来很不错。听起来这样做是合理的吗?

1个回答

16

使用CSS的position: absolute。将以下CSS添加到您的页面:

canvas {
    position: absolute;
    top: 0;
    left: 0;
}

这将使两个画布都放置在同一位置:左上角的最顶部。

你可能想把它们放在包装元素中,该元素需要设置为position: relative,以便其子元素也能够被定位。例如,你的HTML代码应如下所示:

<div class="wrapper">
    <canvas id="canvas1" width="400" height="300"></canvas>
    <canvas id="canvas2" width="400" height="300"></canvas>
</div>

你的CSS将会如下所示:

.wrapper {
    position: relative;
    width: 400px;
    height: 300px;
}

.wrapper canvas {
    position: absolute;
    top: 0;
    left: 0;
}

然后,您可以像定位其他内容一样来定位包装div。


第一个问题:包装器div有什么作用?它只是为了将两个画布放在一起吗?第二个问题:“canvas”是游戏中的2D可点击地图。由于定位的原因,我的画布点击不再被检测到。我该怎么处理? - user422318
第二个隐藏画布的原因是为了快速查找第一个“前端”画布上没有的颜色编码信息。有没有办法可以只隐藏第二个画布?问题在于我需要能够调用context.getImageData(),以便我可以查找(x,y)处的像素。我不确定如果这个第二个画布被隐藏或者是1x1大小,getImageData()调用是否会起作用。你有什么想法吗? - user422318
2
对于更多的读者,为什么不听取包装器的建议呢?毕竟你只需要位置和点击信息... - Goufalite
2
工作得很好,但包装器div的大小为0x0,因此页面的其他部分将被放置在顶部。为了解决这个问题,我让第一个画布使用posistion:static。 - David Lilljegren
我认为@David Lilljegren的评论非常相关,特别是对像我这样的初学者。在应用你的解决方案后,我真的不明白为什么我的div会改变形状。给第一个画布一个静态位置,所有其他画布都使用绝对位置(顶部和左侧为0)解决了这个问题。也许在答案底部加上一个小提示可以节省未来读者很多时间。 - ThaNoob
显示剩余6条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接