【发布时间】:2013-09-17 09:02:09
【问题描述】:
我正在深入研究 HTML5 画布,但在使用本地安装的 Chrome 版本时遇到了一些奇怪的问题。它是 Linux 上的 Chrome 29。
我正在查看以下内容(HTML5 Canvas 中的示例代码,第 2 版):
//draw a big box on the screen
context.fillStyle = "black";
context.fillRect(10, 10, 200, 200);
context.save();
context.beginPath();
context.rect(0, 0, 50, 50);
context.clip();
//red circle
context.beginPath();
context.strokeStyle = "red";
context.lineWidth=5;
context.arc(100, 100, 100, (Math.PI/180)*0, (Math.PI/180)*360, false);
context.stroke();
context.closePath();
context.restore();
//reclip to the entire canvas
context.beginPath();
context.rect(0, 0, 500, 500);
context.clip();
//draw a blue line that is not clipped
context.beginPath();
context.strokeStyle = "blue"; //need list of available colors
context.lineWidth=5;
context.arc(100, 100, 50, (Math.PI/180)*0, (Math.PI/180)*360, false);
context.stroke();
context.closePath();
并且应该得到:
但请参阅:
我的研究表明,Chrome 画布处于不断变化的状态,并且弧线过去曾出现过问题。但是,在 Windows 版 Chrome 的关闭版本和另一个 linux 桌面上的 Chrome 27 上似乎没问题。
我查看了我的 Chrome://flags,没有看到任何明显影响这一点的东西。
任何指导将不胜感激。
编辑:
我在 chrome://flags 中尝试了 #enable-experimental-canvas-features 和 #disable-accelerated-2d-canvas 的变体,但没有任何运气。
这是一个小提琴:
另一个编辑:
此代码适用于我机器上的 Chromium 28.0.1500.71。我开始怀疑这是一个 Chrome 错误。
【问题讨论】:
-
你确定
context.stroke()应该被称为之前context.closePath()吗? -
在你抚摸它之后关闭路径是没有意义的:-) 尝试切换这两行,你能提供一个小提琴吗?
-
context.arc(100, 100, 50, 0, 2*Math.PI, false);已经足够好了,或者至少乘以 360,然后再除以 180……或者,是的,只需使用 2*Math.PI :-)
-
添加了小提琴。发布的代码在 FF 中有效,但在 Chrome 中存在上述问题。
-
感谢您指出中风/关闭问题。我刚刚从 O'Reilly 的网站上加载了这本书的代码,显然没有给它那么重要的阅读。
标签: javascript html google-chrome canvas html5-canvas