gpt4 book ai didi

javascript - 使用百分比而不是像素会更改 html 5 Canvas 会更改其属性吗?

转载 作者:可可西里 更新时间:2023-11-01 13:41:12 27 4
gpt4 key购买 nike

我正在练习 javascript,我正在尝试制作游戏。我希望 canvas 元素是全屏的,所以我对高度和宽度属性使用了百分比,但是当我这样做时,它的行为不像往常那样。当我运行我的调试代码时,它应该制作一个 50 像素 x 50 像素的框,但图形看起来比正常情况下大。

我试过获取 Canvas 的高度和宽度(以像素为单位),但这没有用。它不报告任何错误消息,但它仍然太大。

<!DOCTYPE html>
<html>
<head></head>
<body>
<canvas id="canvas" style="height: 100%; width:100%;"></canvas>
</body>
<style>
html, body {width: 100%;
margin: 0;
height: 100%;
overflow: hidden;
position:fixed;}
</style>
<script>
var canvas = document.getElementById("canvas")
var c = canvas.getContext("2d")

c.fillStyle = "#FFFF00"
c.fillRect(50,50,50,50)
</script>

没有出现任何错误消息,但它的大小不正确,我不明白为什么它不起作用。

最佳答案

如果 Canvas 大小是在 CSS 中设置或使用元素属性设置,则会有所不同。

Canvas 元素的大小由其 widthheight 属性(作为数字)设置。这设置了用于在内存中存储 Canvas 绘图的可寻址像素数。在没有宽度和高度属性的情况下, Canvas 元素尺寸设置为 300 x 150(像素)乘以 default .

应用于 Canvas 的 CSS 可以使用被视为图像的 Canvas 的软件插值来缩放其尺寸。正如一张小图片在全屏显示时看起来更大一样,300 x 150 像素的 Canvas 和其中绘制的对象(使用 Canvas 像素坐标)在放大时也会显得更大。

要使 Canvas 坐标与屏幕大小(以像素为单位)相匹配,请将其 widthheight 属性设置为像素数值。例如

  var canvas = document.getElementById("canvas")
var c = canvas.getContext("2d")

c.fillStyle = "#FFFF00"
c.fillRect(50,50,50,50)
console.log( canvas.width, canvas.height);
alert( "fix?" )
canvas.style=""; // remove CSS scaling
canvas.width = document.body.clientWidth;
canvas.height = document.body.clientHeight;
c.fillStyle = "#FFFF00"
c.fillRect(50,50,50,50)
  body {
width: 100%;
margin: 0;
height: 100%;
background-color: honeydew;
overflow: hidden;
position:fixed;
}
canvas {
background-color: silver;
}
    <canvas id="canvas" style="height: 100%; width:100%;"></canvas>

关于javascript - 使用百分比而不是像素会更改 html 5 Canvas 会更改其属性吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57898008/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com