Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/89.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 有没有办法让html5画布元素可以调整大小?_Javascript_Html_Canvas_Resize - Fatal编程技术网

Javascript 有没有办法让html5画布元素可以调整大小?

Javascript 有没有办法让html5画布元素可以调整大小?,javascript,html,canvas,resize,Javascript,Html,Canvas,Resize,是否有一个本机解决方案在HTML5画布的角落提供了一个类似于默认元素的句柄 可调整大小您需要将画布放入JavaScript绘图函数中: function draw() { var canvas = document.getElementById("myCanvas"); var ctx = canvas.getContext('2d'); ctx.canvas.width = window.innerWidth; ctx.canvas.height = window.innerHeight;

是否有一个本机解决方案在HTML5画布的角落提供了一个类似于默认元素的句柄


可调整大小您需要将画布放入JavaScript绘图函数中:

function draw() {
var canvas = document.getElementById("myCanvas");
var ctx = canvas.getContext('2d');
ctx.canvas.width  = window.innerWidth;
ctx.canvas.height = window.innerHeight;
}

css中的body元素应该将height和width设置为100%

我能想到的最好方法就是使用jQueryUI来调整大小,就像这样

jsFiddle:

Html

Javascript

var canvas = document.getElementById("myCanvas");
var ctx = canvas.getContext("2d");
ctx.fillStyle = "#777";

$(function() {
  $(".resizable").resizable();
});

setInterval(function(){ ctx.fillRect(0, 0, 400, 400); }, 3);

基本上,我已经将画布的样式设置为适合resizble div的内部,默认设置为400乘400。画布具有100%宽度和高度的样式,因此当用户调整可调整大小的div时,画布将刚好伸展。

一个简单的方法是在画布顶部放置一个空div,并将其设置为可调整大小。jQueryUI可能是另一种选择。啊,这是一个好主意,然后只需设置一个侦听器来调整div@Jan,如果你在回答中加入这一评论,我愿意接受。我现在在生产代码中使用了div的思想,它在窗口大小之外工作得非常好,并且在画布上没有提供鼠标手柄。请重新阅读问题。我不想使用jQueryUI,但感谢您提供了一个有效的示例
.resizable{
  width: 400px;
  height: 400px;
}

#myCanvas{
  width: 100%;
  height: 100%;
}
var canvas = document.getElementById("myCanvas");
var ctx = canvas.getContext("2d");
ctx.fillStyle = "#777";

$(function() {
  $(".resizable").resizable();
});

setInterval(function(){ ctx.fillRect(0, 0, 400, 400); }, 3);