Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/431.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 绘制到100%宽度和高度的响应画布_Javascript_Css_Html5 Canvas - Fatal编程技术网

Javascript 绘制到100%宽度和高度的响应画布

Javascript 绘制到100%宽度和高度的响应画布,javascript,css,html5-canvas,Javascript,Css,Html5 Canvas,我试图在一个大画布上获得一个跟随鼠标光标的形状。此代码未按预期工作。如果画布的宽度/高度为屏幕的100%,如何将其修改为相对画布大小 另外,我知道requestanimationframe,但是为了演示这个问题,请忽略它(我正在使用它,但是它的计时非常复杂,与本例无关) 小提琴: CSS: HTML/JS: <!DOCTYPE html> <html> <head> <link href="main.css" rel="style

我试图在一个大画布上获得一个跟随鼠标光标的形状。此代码未按预期工作。如果画布的宽度/高度为屏幕的100%,如何将其修改为相对画布大小

另外,我知道requestanimationframe,但是为了演示这个问题,请忽略它(我正在使用它,但是它的计时非常复杂,与本例无关)

小提琴:

CSS:

HTML/JS:

<!DOCTYPE html>
<html>
    <head>
        <link href="main.css" rel="stylesheet"</link>
    </head>
    <body>
        <div id="wrapper">
            <canvas id="ctx" width="256" height="144"></canvas>
        </div>
        <script>    
            var mouseX, mouseY;
            const WIDTH = 256;
            const HEIGHT = 144;
            var ctx = document.getElementById('ctx').getContext('2d');
            ctx.canvas.addEventListener('mousemove', setMousePosition, false);
            function setMousePosition(e) {
                mouseX = e.clientX;
                mouseY = e.clientY;
            }
            function drawCursor() {
                ctx.clearRect(0,0,WIDTH,HEIGHT);
                ctx.fillStyle = "#FF6A6A";
                ctx.fillRect(mouseX, mouseY, 16, 16);
            }
            setInterval(function (){
                drawCursor();
            }, 40);
        </script>
    </body>
</html>


如果对画布对象使用CSS宽度和高度属性,那么实际上不会更改画布上有多少像素,而是更改画布的大小。要解决问题,请使用JavaScript设置画布的宽度和高度属性:

ctx.canvas.width = innerWidth;
ctx.canvas.height = innerHeight;
JavaScript:

ctx.canvas.width = innerWidth;
ctx.canvas.height = innerHeight;
CSS:


我还想评论一下,在css中,如果我删除宽度:100%和高度:100%,它将按照我想要的方式工作,但问题是,就渲染而言,我需要一个拉伸的画布,有没有办法解决这个问题?顺便说一句,link元素不能有一个closing元素,而不是
使用
这是可行的,但它也缩小了所有的规模。该项目最初的设计宽度和高度设置为100%。没有其他方法吗?@simon您仍然可以将宽度和高度设置为100%,但这并不完美,但在更大的屏幕上,您将无法注意到它。在我进行一些测试后,我将为您提供此问题的正确答案。谢谢@BálintYes,在缩放了我所有的图像以匹配这一点后,一切都正常,我的性能得到了显著提升。非常感谢。
body, canvas {
    margin: 0;
    padding: 0;
}