Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/82.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 画布及其内容的动态调整_Javascript_Html_Canvas - Fatal编程技术网

Javascript 画布及其内容的动态调整

Javascript 画布及其内容的动态调整,javascript,html,canvas,Javascript,Html,Canvas,我是Javascript的初学者,请耐心听我说 基本上,我正在使用Javascript为网站制作一个沙盒绘图工具。这是使用画布完成的。我需要做的是能够动态调整画布的大小,但同时保持画布上的所有内容按比例缩放 我认为以前没有人问过这个问题。这看起来很简单,但我目前在画布上的所有对象都是以绝对坐标定义的。我还可以用鼠标事件来画东西。当我想放大画布时(比如说放大一倍)。里面的所有对象都不会被适当放大到一定的比例,鼠标坐标系也会被弄乱 我能想到的唯一解决方案是在我所有的绘图部件中添加一个比例因子,但这对

我是Javascript的初学者,请耐心听我说

基本上,我正在使用Javascript为网站制作一个沙盒绘图工具。这是使用画布完成的。我需要做的是能够动态调整画布的大小,但同时保持画布上的所有内容按比例缩放

我认为以前没有人问过这个问题。这看起来很简单,但我目前在画布上的所有对象都是以绝对坐标定义的。我还可以用鼠标事件来画东西。当我想放大画布时(比如说放大一倍)。里面的所有对象都不会被适当放大到一定的比例,鼠标坐标系也会被弄乱


我能想到的唯一解决方案是在我所有的绘图部件中添加一个比例因子,但这对于很多代码来说是非常棘手的。有更好的方法吗?

如果您不介意双尺寸画布上的锯齿,那么您可以简单地使用CSS将画布的大小增加一倍。然后将每个传入的mouseEvent坐标除以2

如果您不想在双尺寸画布上出现锯齿,那么:

  • 将画布元素的大小加倍:
    画布。宽度*=2
    画布。高度*=2
    这会自动擦除所有画布内容
  • 放大画布:
    上下文。缩放(2,2)
  • 使用未更改的原始坐标重新绘制所有绘图零件。令人高兴的是:您不必缩放任何图形坐标——context.scale会自动为您这样做
  • 将每个传入的mouseEvent坐标除以2

如果您不介意双尺寸画布上的锯齿,那么您可以简单地使用CSS将画布的大小增加一倍。然后将每个传入的mouseEvent坐标除以2

如果您不想在双尺寸画布上出现锯齿,那么:

  • 将画布元素的大小加倍:
    画布。宽度*=2
    画布。高度*=2
    这会自动擦除所有画布内容
  • 放大画布:
    上下文。缩放(2,2)
  • 使用未更改的原始坐标重新绘制所有绘图零件。令人高兴的是:您不必缩放任何图形坐标——context.scale会自动为您这样做
  • 将每个传入的mouseEvent坐标除以2