canvas学习17之如何改变canvas的原点

复习

上节课,我们学习了状态的保存和恢复。状态保存使用方法save(),状态恢复使用方法restore()。状态被保存在了一个栈里面。

可以保存的状态主要有两类,第一类是基本样式,第二类是操作后结果,包括变形,移动,剪切路径等。其中操作后结果我们没有学习过。

学习canvas原点的移动

问:我们可以改变canvas的原点吗?

答: 当然可以,听我细细道来。

截止目前为止,我们学习过的canvas坐标系,都是原点在canvas的左上角,今天开始,我们学习如何改变canvas原点的位置。

想要改变要点的位置,我们就要用到translate(x,y)接口。translate接受两个值,x表示向左右的偏移量,正数代表向右便宜,负数代表向左便宜;y代表上下的偏移量,正数代表向下便宜,负数代表向上便宜。

问:可以举个移动原点的例子吗?

答:可以。如下:

<canvas width="400" height="400" id="mycanvas"></canvas>
<script>
  const canvas = document.getElementById('mycanvas')
  const ctx = canvas.getContext('2d')
  ctx.fillStyle = 'red'
  ctx.fillRect(0, 0, 200,200)  // 原点处画了一个200*200的矩形
  ctx.translate(200, 200)
  ctx.fillStyle = 'blue'
  ctx.fillRect(0, 0, 200,200) // // 原点处画了另一个200*200的矩形
</script>

在上面的例子中,我们首先在400的正方形canvas原点处画了一个长200的红色正方形。然后将原点移动到了canvas的正中心,再以原点为中心画了一个200的蓝色正方形。我们可以看到,两个正方形虽然都是以原点为中心,但是他们的位置却发生了变化。

问:改变原点后,它的坐标系发生了什么变化?

答:在没有改变canvas的原点之前,我们在canvas的坐标系中,只有正数,移动原点后,canvas的平面中就会出现一个完整的坐标系。不过这个坐标系中,y轴的方向需要注意,它向上为负,向下为证。

问:可以举个例子吗?

答:可以。我们还是继续把上面移动原点的代码移下来,然后在新的坐标系上举例子。

<canvas width="400" height="400" id="mycanvas"></canvas>
<script>
  const canvas = document.getElementById('mycanvas')
  const ctx = canvas.getContext('2d')
  ctx.fillStyle = 'red'
  ctx.fillRect(0, 0, 200,200)  // 原点处画了一个200*200的矩形
  ctx.translate(200, 200)
  ctx.fillStyle = 'blue'
  ctx.fillRect(0, 0, 200,200) // 原点处画了另一个200*200的矩形
  ctx.fillStyle = 'yellow'
  ctx.fillRect(-200, -200, 200,200) // 在新原点的基础上,画一个200*200的矩形覆盖掉就原点处的矩形
</script>

如上,在已有的基础上,我们在新的原点基础上,在(-200,-200)处建了一个新的坐标系。

致此,我们已经学会了移动原点,留个实践作业,将状态的恢复保存和原点的移动结合起来,做一个demo。

本文实现结果可以点击我查看

最后支持一下,点击查看一下原文吧

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • @(HTML5)[canvas与SVG] [TOC] 十 、canvas canvas的基本用法 canvas是H...
    踏浪free阅读 871评论 0 0
  • 一、添加一个 Canvas 1.布置画布:通过添加<canvas>标签,添加canvas元素 Canvas在HTM...
    Lia代码猪崽阅读 2,331评论 0 3
  • canvas元素的基础知识 在页面上放置一个canvas元素,就相当于在页面上放置了一块画布,可以在其中进行图形的...
    oWSQo阅读 10,447评论 0 19
  • 一、 OpenGL简介 OpenGL(Open Graphics Library)是一个跨编程语言、跨平台的编程图...
    MirL阅读 1,262评论 0 2
  • 无由诉说思乡意, 故把照片信手翻。 但有双亲音信至, 却问子女胡不还? 实习第三天。学校不能住人,租房太贵,住在辅...
    故事里的小黄瓜阅读 322评论 0 0

友情链接更多精彩内容