HTML画布坐标在使用JS和嵌入HTML中创建时是不同的
HTML canvas coordinates are different when created using JS versus embed in HTML
玩HTML5画布和JS,我发现一个奇怪的行为,当画布直接添加到HTML正文,而不是使用JS创建画布。
<!DOCTYPE html>
<html>
<head></head>
<body>
<canvas id="test" width="200" height="200" style="border:1px solid #000000;">
</canvas>
<script>
var c=document.getElementById("test");
ctx=c.getContext("2d");
ctx.fillStyle = "#9ea7b8";
ctx.fill();
ctx.moveTo(0,0);
ctx.lineTo(200,200);
ctx.stroke();
// creating canvas using JS
c = document.createElement("canvas");
c.id="MyCanvas";
c.style.width="200px";
c.style.height="200px";
c.style.border="1px solid #000000";
ctx=c.getContext("2d");
ctx.fillStyle = "#9ea7b8";
ctx.fill();
ctx.moveTo(0,0);
ctx.lineTo(200,200);
ctx.stroke();
document.body.appendChild(c);
</script>
</body>
</html>
请参阅代码&在这里输出
我希望线条(笔画)在画布上是一致的对角线,但是唉!请帮助我知道我哪里做错了!
注意:我忘了提,我在Chrome上尝试了这个,只是不确定该行为是否与其他浏览器一致。
基本上,如果你从样式到属性改变它工作。
为什么?
来源似乎宽度和高度属性决定了画布坐标系统的宽度或高度,而CSS属性只是决定了它将在其中显示的框的大小。
像这样就可以了:
var c = document.getElementById("test");
ctx = c.getContext("2d");
ctx.fillStyle = "#9ea7b8";
ctx.fill();
ctx.moveTo(0, 0);
ctx.lineTo(200, 200);
ctx.stroke();
// creating canvas using JS
c = document.createElement("canvas");
c.id = "MyCanvas";
c.setAttribute("width", "200px")
c.setAttribute("height", "200px")
c.style.border = "1px solid #000000";
ctx = c.getContext("2d");
ctx.fillStyle = "#9ea7b8";
ctx.fill();
ctx.moveTo(0, 0);
ctx.lineTo(200, 200);
ctx.stroke();
document.body.appendChild(c);
<canvas id="test" width="200" height="200" style="border:1px solid #000000;"></canvas>
Canvas width
和height
属性与其CSS width
和height
属性不相同。设置canvas.width/height
属性决定了可绘制的总像素区域,可以(但不需要)用CSS缩放以在屏幕上变大或变小。
正常场景:使canvas属性边界大于CSS边界
事实上,要制作高密度显示画布,必须将canvas.width
和canvas.height
设置为css的两倍大。换句话说,你可以这样做:
// Two canvas pixels per screen pixel so it looks nice
// on a high density (in this case pixel ratio: 2) display
canvas.width = 800;
canvas.height = 800;
canvas.style.width = '400px';
canvas.style.height = '400px';
正常场景:使canvas属性边界小于CSS边界
另一方面,为了使一些应用程序,如游戏快速画布。宽度和画布。高度可以限制为640x480
(或更小的东西),然后用CSS缩放以占据整个屏幕。因为在画布上处理的像素总数很小,所以游戏将比使用一个非常大的画布并填充屏幕更快。显然游戏看起来会有所不同,因为CSS会缩放图像(无论好坏)。
相关文章:
- 从html创建一个指令,该指令按类名应用函数
- 用HTML创建一个下拉框的简单方法,只需包含0到x
- 基于当前内部HTML创建动态jQuery变量名称
- mootools:从 HTML 创建一个新的 DOM 元素
- 使用 flash、javascript、classic asp 从 html 创建 CSV
- JQuery + 从数组中为 html 创建单选按钮
- 100%的高度在主体和html创建滚动问题
- 使用JavaScript与常规HTML创建HTML元素
- 用HTML创建JavaScript数组
- 从HTML创建base64字符串
- 如何仅使用JS和HTML创建按钮
- 如何通过jquery .html创建一个href,然后使用它的事件
- 在用javascript和html创建程序时遇到问题
- 如何使用引导程序和HTML创建联系人表单
- 如何使用Javascript和HTML创建一个文档文件
- 用HTML创建登录页面
- 使用Canvas和Html 5创建类似flash的动画
- 使用jQuery从HTML创建一个JSON对象
- 如何禁用由html创建的特定dijit contentPane选项卡
- 用PHP, JavaScript和Html创建一个简单的购物车