【问题标题】:HTML Canvas fillRect fill 25% of window-heightHTML Canvas fillRect 填充 25% 的窗口高度
【发布时间】:2016-05-08 11:47:02
【问题描述】:

我正在尝试学习如何使用 HTML 的 Canvas 及其属性。 现在我正在尝试绘制地面和天空,我希望天空为屏幕高度的 75%,地面为 25%。

这很容易使用 div,并使用 CSS 或 JavaScript CSS Query 设置样式。现在我在画布上,我不知道如何设置 fillRect 属性......

我的代码:

var windowHeight = $(window).height();
var windowWidth = $(window).width();

var skyHeight = windowHeight - (windowHeight * 0.25);
var groundHeight = windowHeight - (windowHeight * 0.75);

ctx = gameCanvas.getContext("2d");

ctx.fillStyle="green";
ctx.fillRect(0,0,windowWidth,windowHeight);

ctx.fillStyle="cyan";
ctx.fillRect(0,0,windowWidth,skyHeight);  

另外:如果我尝试使用即

ctx.fillStyle="cyan";
ctx.fillRect(0,0,30,30);

这会在绿色“地面”背景上绘制一个完美的正方形,但如果我更改为即

ctx.fillRect(0,0,200,200);

它将填满我的整个屏幕高度,以及超过 50% 的屏幕宽度。

根据http://www.w3schools.com/tags/canvas_fillstyle.asp canvas fillrect 正在使用像素,但 200 x 200 像素绝对不应该填满我的整个屏幕高度。 :/

【问题讨论】:

  • 你告诉画布它的尺寸是多少的部分在哪里?就像您需要具有特定大小的任何其他 HTML 元素一样,您需要告诉它它的 widthheight 是什么,否则它只会选择您不需要的随机值是。

标签: javascript html css canvas


【解决方案1】:

你告诉画布它的尺寸是多少的部分在哪里?就像任何其他需要具有特定大小(视频、图像)的 HTML 媒体元素一样,如果您想要可靠大小的内容(如果您不这样做,则需要告诉它它的 widthheight 是什么) by convention 画布大小为 300 x 150 像素)。而且因为我们正在设置我们可以绘制的像素数量,这不像 CSS 那样“纯粹是装饰性的”,我们必须正确地做到这一点:

var cvs = document.querySelector("canvas");

// if you didn't use <canvas width="..." height="...">, we need this:
cvs.width = 800;
cvs.height = 400;

然后你就可以画画了:

var ctx = cvs.getContext("2d");

ctx.fillStyle = "green";
ctx.fillRect(0,0.75*cvs.height, cvs.width,0.25*cvs.height);

ctx.fillStyle = "lightblue";
ctx.fillRect(0,0, cvs.width, 0.75*cvs.height);

http://jsbin.com/tejiqixeji/edit?html,js,output

【讨论】:

  • 这有点尴尬...我同时在做一个jQuery移动滑动识别脚本,所以我在做:$("#start").css("width", windowWidth ); $("#start").css("height", windowHeight);而不是设置画布大小...:/感谢您的提醒! :P
  • 是的,这只是为了美观地拉伸画布,并且看起来真的很奇怪 =)
  • “就像任何其他 HTML 媒体元素一样......”这是完全错误的。除了&lt;audio&gt; 标记(出于显而易见的原因)之外,每个 HTML 媒体元素都会将其默认大小设置为其内容之一。但是画布在创建时没有内容,因此浏览器必须默认为 300*150 矩形(而不是像您在对 OP 的评论中所说的“随机值”)。
  • 我看到您很方便地忽略了“您需要具有特定大小”的部分,这是有原因的。如果您需要尺寸为特定尺寸 的图像元素或视频元素,那么可以:您绝对需要指定这些值。在这种情况下,画布需要是窗口的大小,因此这些值需要在某处固定,然后才能按预期工作。尽管您完全正确,因为它们不是随机的,所以我添加了一个指向规范的链接,以获取答案。
猜你喜欢
  • 1970-01-01
  • 2013-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-12
  • 1970-01-01
  • 2010-12-21
相关资源
最近更新 更多