【发布时间】:2013-09-11 19:56:59
【问题描述】:
我有一张图片,并在其上覆盖了一个画布,这样我就可以“在”图片上进行绘制,而无需修改图片本身。
<div class="needPic" id="container">
<img id="image" src=""/>
<!-- Must specify canvas size in html -->
<canvas id="sketchpad" width="70%" height="60%">Sorry, your browser is not supported.</canvas>
</div>
我可以在上面的画布行中指定宽度和高度(以像素为单位),效果很好,但是我需要根据屏幕尺寸动态调整大小(必须在小型智能手机和平板电脑上工作)。当我尝试如上所示输入百分比时,它会将其解释为像素。因此,画布将是 70 像素宽和 60 像素高。
由于某种原因,我无法在 CSS 中调整画布的大小,所以看起来我必须在 html 中进行调整。澄清一下,当我尝试在 CSS 中指定画布尺寸时,它们实际上并没有改变画布的大小。似乎图像以某种方式受到干扰。
任何帮助将不胜感激。
更新:如果我这样做<canvas id="sketchpad" style="width:70%;height:60%;"></canvas>,那么它默认为 150 像素的高度和 300 像素的宽度(无论设备如何),然后 拉伸 画布以适应分区。我在 CSS 中将 div 设置为 60% 宽度和 60% 高度,因此画布会拉伸以填充它。我通过记录 canvas.width 与 canvas.style.width 确认了这一点——canvas.width 为 300px,canvas.sytle.width 为“60%”(来自父 div)。这会导致一些非常奇怪的像素化和绘图效果......
【问题讨论】:
-
也许您可以在 html 元素中添加 CSS,例如:
<canvas style="width:70%;height:60%;">。 -
@FabSa,我刚刚尝试过,它做了一些事情,但没有像预期的那样。请参阅上面的更新。
-
如您所见,当您设置样式时,浏览器只会拉伸/收缩画布,但不会更改画布的每英寸点数。您需要从脚本中设置尺寸(连同样式)。您可以查看一个 Impactjs 文档:impactjs.com/documentation/impact-on-mobile-platforms(请参阅“始终以本机分辨率渲染”部分,它可能会帮助您更好地理解问题)。