javascript - 为什么 HTML Canvas 有两种不同的尺寸?

标签 javascript html css canvas

<分区>

我目前正在开发一个 HTML/Javascript 元素,我在其中使用 HTML Canvas 和 Context2D 进行绘图。 或多或少,我正在绘制一个没有固定图 block 大小的二维世界的一部分。

let width = canvas.width;
let height = canvas.height;
let cellHeight = height/rows * viewSizeMultiplier.y,cellWidth = width/columns * viewSizeMultiplier.x;

viewSizeMultiplier 相当于 map 上 8 个 Tiles 的 1/8。单击 Canvas 时获取特定的 Tile 使我感到很吃力,因为 canvas.size 不会通过调整窗口大小来自行调整。

.canvas { 
   width: 60%;
   height: 80%;
   left:5%;
   top:10%;
}

这就是我在 CSS 中实现 Canvas 的方式。为了在我的屏幕上显示当前的 Tile,我必须像这样计算不同尺寸的纵横比:

function  getMousePos(canvas, evt) {
    var rect = canvas.getBoundingClientRect(),
        scaleX = canvas.width / rect.width,
        scaleY = canvas.height / rect.height; 

    return {
      x: (evt.clientX - rect.left) * scaleX,   
      y: (evt.clientY - rect.top) * scaleY    
    }
  }

所以我的问题是为什么会有 2 种不同尺寸的 Canvas ?如果它使用 canvas.size 大小,它会调整它的分辨率吗?

添加的代码段:

let canvas = document.getElementsByClassName('canvas')[0];
const canvasWidth= canvas.width;
const actualWidth =canvas.getBoundingClientRect().width;
console.log(canvasWidth,actualWidth);//300 , 522

最佳答案

CSS 样式在 Canvas 首次创建后不会更改 Canvas 的像素尺寸。您需要专门设置 canvas.widthcanvas.height 到新尺寸以更改 Canvas 的像素大小,否则您将结束只不过是原始的宽度 * 高度像素缩放到不同的大小。

您需要监听调整大小事件以了解何时更改 Canvas 的尺寸。

关于javascript - 为什么 HTML Canvas 有两种不同的尺寸?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58616270/

相关文章:

javascript - Angular Material主题不改变颜色

html - 表内的绝对元素导致表启用 overflow-y : scroll somehow

javascript - 使用 webpack 将所有部分放在一起

javascript - nodejs - jsdom 模块在 require 期间返回 isContext() 错误

javascript - 使用canvas编辑视频时如何减少getImageData的内存占用?

javascript - 更改 alphaMap 不透明度不会更新(THREE.JS R76)

html - HTML5 中的本地存储、 session 存储、网络存储、网络数据库和 cookie

javascript - 给定 "use strict"行为,是否有面向 future 的方法向 native 浏览器对象添加属性?

Jquery "$.preferCulture()"不可用/不可访问

javascript - 滚动效果