canvas绘图——如何把图形放置画布中心

案例:使用canvas在页面中绘制一个红色的正方形

1、插入canvas元素

<body>
    <canvas width="512" height="512"></canvas>
</body>

需要注意的地方:canvas元素的width和height 指的是画布的宽高,此属性为画布宽高。而css 属性的宽高,是响应canvas 在页面上呈现的大小,即样式宽高。

2、canvas的坐标系

3、使用canvas绘制几何图形

// 获取camvas上下文
const canvas = document.querySelector('canvas');
// 获取2d上下文
const context = canvas.getContext('2d');
//在画布中心点绘制绘制100*100的正方形,因为左上角的坐标系是(0,0),右下角是canvas的画布坐标,
//(canvas.width,canvas.hegiht ),因此中心点的坐标就是(context.rect(0.5*canvas.width, // 0.5*canvas.hegiht, 100, 100)

const rectSize = [100, 100];
context.fillStyle = 'red';
context.beginPath();
context.rect(0.5 * canvas.width, 0.5 * canvas.height, ...rectSize);
context.fill();

效果如下:

可以看到,小正方形并没有在画布的中心,原因是,设置坐标点的时候,将参数x和y 设置成画布宽高的一半。而rect 指令的x、y 的值,表示的是,要绘制出的矩形的左上角坐标而不是中心点的坐标。解决方案;

方法一:重新计算rect的x、y参数,等于画布的宽高的一半分别减去矩形自身宽高的一半,代码如下:


context.rect(0.5 * (canvas.width - rectSize[0]), 0.5 * (canvas.height - rectSize[1]), ...rectSize);

方法二:给画布设置平移变化,在进行绘制,代码如下:


context.translate(-0.5 * rectSize[0], -0.5 * rectSize[1]);

两种方法对比:

第一种方法:操作简单,易理解,弊端:如果是不规则图形,就会很麻烦

第二种方法:对canvas画布的整体做一个平移操作,这样,只需获取中心点与左上角的偏移,然后对画布设置translate变换就可以,不需要再去改变图形的顶点位置。不过,这样操作会导致改变画布的状态,因此要把画布状态恢复回来。

恢复画布的方法,第一种方向平移,代码如下:


// 平移
context.translate(-0.5 * rectSize[0], -0.5 * rectSize[1]);

... 执行绘制

// 恢复
context.translate(0.5 * rectSize[0], 0.5 * rectSize[1]);

第二种方法:canvas 上下文提供了save和restore 方法,可以暂存和恢复画布的某个时刻的状态。save指令,不仅可以保存当前的translate状态,还可以保存其他信息,比如,fillstyle等,而restore指令则可以将状态指令恢复成成save前的指令。代码如下:


context.save(); // 暂存状态
// 平移
context.translate(-0.5 * rectSize[0], -0.5 * rectSize[1]);

... 执行绘制

context.restore(); // 恢复状态

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Canvas是HTML5新增的一个用于绘制图形的标签,可以通过JavaScript来控制Canvas进行图形的绘制。在进行Canvas绘制时,可以通过调整画布的位置、大小和旋转角度等属性,来控制绘制出来的图形的位置和形态。 下面我们就来介绍一下Canvas画布的移动、缩放和旋转: 1. 画布移动 画布移动可以通过Canvas提供的translate方法来实现。translate方法接收两个参数,分别表示x轴和y轴方向上的偏移量。偏移量为正值表示向右或向下移动,为负值表示向左或向上移动。 例如,我们可以通过下面的代码将画布向右移动50个像素,向下移动100个像素: ``` context.translate(50, 100); ``` 2. 画布缩放 画布缩放可以通过Canvas提供的scale方法来实现。scale方法接收两个参数,分别表示x轴和y轴方向上的缩放比例。缩放比例为大于1的值表示放大,小于1的值表示缩小。 例如,我们可以通过下面的代码将画布在x轴和y轴方向上都放大2倍: ``` context.scale(2, 2); ``` 3. 画布旋转 画布旋转可以通过Canvas提供的rotate方法来实现。rotate方法接收一个参数,表示旋转的角度,单位为弧度。 例如,我们可以通过下面的代码将画布旋转45度: ``` context.rotate(Math.PI / 4); ``` 需要注意的是,Canvas绘图的坐标系原点默认在画布的左上角,而移动、缩放和旋转操作都是相对于原点进行的。因此,在进行这些操作时,需要先将画布的原点移动到需要的位置,再进行操作。例如,如果需要将画布向右移动50个像素,需要先将原点移动到(50,0)的位置,再进行移动操作: ``` context.translate(50, 0); ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值