Javascript 如何在不拉伸或模糊图形的情况下,使画布达到身体的全宽和全高?

Javascript 如何在不拉伸或模糊图形的情况下,使画布达到身体的全宽和全高?,javascript,html,canvas,Javascript,Html,Canvas,我想做一个画布,占据身体的全部宽度和高度(没有滚动),并且有非拉伸和非模糊的图形。每当我制作一张100vw和100vh的画布时,画面就会变得模糊和拉伸,尺寸不正确 例如: <html> <body> <canvas id="c" style="border: 2px solid black;"></canvas> <style> body, html {padding: 0; margin: 0; overflow: hidden;}

我想做一个画布,占据身体的全部宽度和高度(没有滚动),并且有非拉伸和非模糊的图形。每当我制作一张100vw和100vh的画布时,画面就会变得模糊和拉伸,尺寸不正确

例如:

<html>
<body>
<canvas id="c" style="border: 2px solid black;"></canvas>
<style> body, html {padding: 0; margin: 0; overflow: hidden;} </style>
<script>
var c = document.getElementById("c");
var ctx = c.getContext("2d");

function draw() {
ctx.fillRect(100, 50, 100, 75);
c.style.width = document.body.clientWidth;
c.style.height = document.body.clientHeight;
}
draw();
</script> 

正文,html{填充:0;边距:0;溢出:隐藏;}
var c=document.getElementById(“c”);
var ctx=c.getContext(“2d”);
函数绘图(){
ctx.fillRect(100,50,100,75);
c、 style.width=document.body.clientWidth;
c、 style.height=document.body.clientHeight;
}
draw();
这段代码生成了一个黑色的矩形,但是非常模糊,并且比我想要和期望的大得多(考虑到画布的宽度和高度是整个身体,矩形的宽度和高度只有100和75)。这个问题有什么解决办法吗


谢谢。

它被拉伸等原因是由于以下几个原因:

  • 必须在设置画布的大小后绘制矩形
  • 设置画布大小时,实际上并没有设置样式的高度和宽度,因为元素画布本身已经具有这些属性

    还请注意,您希望body/html css高度为100%,因为它开始时是自动的,当canvas的高度设置为body的高度时,它只会填充body最初提供给它的与整个屏幕相比的小空间

新的
draw()
函数应该如下所示

函数绘图(){
c、 width=document.body.clientWidth;//从两者中删除.style
c、 高度=document.body.clientHeight;
fillRect(100,50,100,75);//fillRect post设置大小
}
和css

body,html{填充:0;边距:0;溢出:隐藏;高度:100%;}

我认为这是因为您在矩形后面指定了高度。尝试将设置画布大小的两个序列放在
ctx.fillRect()
之前,或者在html元素
上设置画布的实际高度。告诉我,如果我用100vw和100vh制作画布的样式,goesWould是如何工作的?也许,它被拉伸的原因是因为你在设置大小之前绘制矩形,只要你在画布上绘制任何东西之前设置大小,它就不应该被拉伸。同样,当我将宽度和高度更改为100vw和100vh时,画布会自动调整大小至约100 x 100。为什么会这样?设置
canvas.width=window.innerWidth
canvas.height=window.innerHeight
我似乎没有太多模糊或拉伸的痕迹,这很有效!我只是想知道,有没有办法让这幅画更清晰一点?我会将此标记为一个答案,但请回答:)这是最清楚的,因为它的大小可能看起来有点模糊?可能还有另一个像OpenGL这样的图形库,它的显示会更加清晰,但与HTML的CanvasThank you相比,该框架的设置将完全不同。这是非常有用的信息+1并标记为答案!