Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/75.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 使用jQuery调整画布大小_Javascript_Jquery_Css - Fatal编程技术网

Javascript 使用jQuery调整画布大小

Javascript 使用jQuery调整画布大小,javascript,jquery,css,Javascript,Jquery,Css,我想根据onresize&onload事件调整画布的大小 工作正常的代码是js和jQuery的混合体,如下所示: 如何将完整代码翻译成jQuery 到目前为止,我尝试的方法效果不佳: window.onload = window.onresize = function() { $("canvas").width($("canvas").offset().width); $("canvas").height($("canvas").offset().height); } // this c

我想根据onresize&onload事件调整画布的大小

工作正常的代码是js和jQuery的混合体,如下所示:

如何将完整代码翻译成jQuery

到目前为止,我尝试的方法效果不佳:

window.onload = window.onresize = function() {
  $("canvas").width($("canvas").offset().width);
  $("canvas").height($("canvas").offset().height);
} // this code is not working as expected
什么才是可行的方法呢?

.offset有.top和.left,而不是.width和.height

你实际上在寻找与本地人相同的结果

或者更疯狂

function resizeCanvas() {
  $("canvas").width($("canvas").outerWidth());
  $("canvas").height($("canvas").outerHeight());
}
$(function(){
  resizeCanvas()
  $(window).on("resize", resizeCanvas)
})
请注意,如果您在具有多个画布的页面上执行此操作,您将从匹配到页面上所有画布元素的第一个画布元素中给出相同的大小,而不是仅使用[0]从第一个画布元素到第一个画布元素

如果您希望每个人都是独立的,您应该这样做:

function resizeCanvas() {
  $("canvas").each(function(){
    this.width(this.outerWidth())
    this.height(this.outerHeight())
  }
}
$(function(){
  resizeCanvas()
  $(window).on("resize", resizeCanvas)
})
这还应该提高性能,因为每次调用只匹配一次查询画布

重要提示:在任何情况下,您都应该将resize处理程序包装在一个去盎司函数中,否则浏览器将徒劳无功,导致延迟。我建议如下:

$(function(){
  resizeCanvas()
  $(window).on("resize", _.debounce(resizeCanvas, 400))
})

PS:为什么要使用jQuery?

我编辑完我的答案:毫无冒犯之意,但老实说,除了我自己的功能外,这些功能都不能正常工作。我不明白为什么会这样。不过,我会再试一次,让你知道错误是什么。没有人采取行动。你能告诉我你想用这段代码实现什么吗?它似乎会反复将维度设置为等于或大于现有维度的维度,要么什么都不做,要么永远增加画布元素。你能发布一个关于你的最小示例的JSBin | JSFiddle |代码笔吗?最后,请澄清为什么jQuery是解决方案的一项要求,它是否支持浏览器?
function resizeCanvas() {
  $("canvas").each(function(){
    this.width(this.outerWidth())
    this.height(this.outerHeight())
  }
}
$(function(){
  resizeCanvas()
  $(window).on("resize", resizeCanvas)
})
$(function(){
  resizeCanvas()
  $(window).on("resize", _.debounce(resizeCanvas, 400))
})