首先,当我们在页面上初始化canvas时,相当于在上面放了一块画布,这块画布我们可以理解为上面有一个坐标系(如下图),左上角是原点,往右是X轴的正方向,往下是Y轴的正方向,我们在画布上绘制的内容都是基于这个坐标系完成,但是有时候我们需要对绘制的内容进行调整,例如将上面的一个图形旋转某个角度,或者在画布正中心画一个图形,我们就可以通过translate和rotate将坐标系进行移动之后再进行绘制.

还有,rotate的旋转是以原点为基准进行旋转,,这一点很重要

功能与参数介绍
函数 参数 描述
translate dx,dx 将坐标系在X轴和Y轴移动的距离
rotate angle 坐标系旋转的角度,顺时针为正,,逆时针为负
save 保存当前坐标系的状态
restore 恢复上一次坐标系状态

当我们不对画布进行旋转和移动的时候,在上面绘制一个矩形,是这样子的

可以看到此时是基于左上角进行绘制的,如果我们用translate将它向右和向下移动200px和100px呢

可以看到,画布位置没有改变,我们移动的只是坐标系,如果我们继续在上面绘制图形,仍然是以现在这个位置的坐标系为准,如果我们只想在这个位置画一次之后就恢复坐标系原始位置,我们应该在移动之前调用save()保存状态,绘制后调用restore()恢复.

如果我们想将最开始的矩形以自身中心旋转90°呢,想看代码和效果图

emmmm...没有计算好,导致有点跑偏,但是它还是以自己为中心转了90°,但是没事,不影响理解rorate和translate这两个函数配合的理解。
首先看红色框中的第一行代码,执行后坐标系是这样的

第二行代码旋转后是这样的

注意看此时X轴和Y轴已经改变,以及正方向的方向。第三行代码执行后如下

  • 为什么会往右上方跑呢?因为我们translate中的参数是负数,而此时坐标轴的正值方向是左边和下边,所以是往右边和上边跑
  • 为什么原点会跑出画布之外?因为X轴移动的距离是width/2,而竖直方向空间不足,就继续往上走了。

通过坐标系来说明这两个函数主要是因为最近做的一个项目中需要将画布上面绘制的图片以图片自身为中心旋转90°或者180°,而看了许多博客后比较少通过坐标系来讲解这两个函数,尝试了很久之后发现通过坐标系来理解虽然麻烦,但是感觉简单点。

HTML canvas中translate()与rotate()的理解的更多相关文章

  1. 将canvas中左上角的原点坐标位置改为左下角

    在使用canvas的时候,原点坐标在左上角,这个很犯人,因为一般的坐标基本都是在左下角,即笛卡尔坐标系,那怎么进行转变呢,在这里用到了canvas的translate,rotate,和scale进行转 ...

  2. android canvas中rotate()和translate()两个方法详解

    rotate()和translate() 1.看到这个题目的时候,有人会觉得这不就是一个对画布的旋转和平移的嘛,但是其中的细节的地方还是需要深究一下的. 例如:有个需求将TextView的文字竖直显示 ...

  3. 马尾图案之canvas的translate、scale、rotate的方法详解

    1.translate(x,y):平移 将画布的坐标原点向左右方向移动x,向上下方向移动y.canvas的默认位置是在(0,0).  例子:画布原点假如落在(1,1),那么translate(10,1 ...

  4. 讲解Canvas中的一些重要方法

    Canvas所提供的各种方法根据功能来看大致可以分为几类: 第一是以drawXXX为主的绘制方法: 第二是以clipXXX为主的裁剪方法: 第三是以scale.skew.translate和rotat ...

  5. Canvas中的save方法和restore方法

    初学者也许会误认为canvas中save方法是用来保存绘图状态的图形,而restore方法是用来还原之前保存的绘图状态的图形,其实不然. save():保存当前的绘图状态. restore():恢复之 ...

  6. 图片在 canvas 中的 选中/平移/缩放/旋转,包含了所有canvas的2D变化,让你认识到数学的重要性

    1.介绍 canvas 已经出来好久了,相信大家多少都有接触. 如果你是前端页面开发/移动开发,那么你肯定会有做过图片上传处理,图片优化,以及图片合成,这些都是可以用 canvas 实现的. 如果你是 ...

  7. 转:自定义控件三部曲之动画篇——alpha、scale、translate、rotate、set的xml属性及用法

    第一篇: 一.概述 Android的animation由四种类型组成:alpha.scale.translate.rotate,对应android官方文档地址:<Animation Resour ...

  8. Animation 动画详解(一)——alpha、scale、translate、rotate、set的xml属性及用法

    一.概述 Android的animation由四种类型组成:alpha.scale.translate.rotate,对应android官方文档地址:<Animation Resources&g ...

  9. [转]Animation 动画详解(一)——alpha、scale、translate、rotate、set的xml属性及用法

    转载:http://blog.csdn.net/harvic880925/article/details/39996643 前言:这几天做客户回访,感触很大,用户只要是留反馈信息,总是一种恨铁不成钢的 ...

随机推荐

  1. 发布项目到github上web服务器来运行

    $ git add dist Administrator@LuoTong- MINGW32 /D/react_workspace (master) $ git commit -m "git ...

  2. redis进阶知识

    原文地址:https://my.oschina.net/u/4052893/blog/3001173 一.缓存雪崩 1.1什么是缓存雪崩? 回顾一下我们为什么要用缓存(Redis): 现在有个问题,如 ...

  3. SCUT - G - 魔法项链 - 树状数组

    https://scut.online/contest/30/G 很久以前做的一个东西,当时是对R排序之后树状数组暴力统计当前区间的前缀和.每有一个元素出现在R的范围内,就解除他的同样元素的影响,在他 ...

  4. Maven clean install 跳过单元测试

    1.使用MVN命令 mvn clean install -DskipTests 或者 mvn clean install -Dmaven.test.skip=true 2.Eclipse中设置clea ...

  5. 剑指offer-平衡二叉树-python

    题目描述 输入一棵二叉树,判断该二叉树是否是平衡二叉树. 思路: 平衡二叉树 (AVL)平衡二叉树是一种二叉排序树,其中每个结点的左子树和右子树的高度差至多等于1.它是一种高度平衡的二叉排序树.意思是 ...

  6. webpack收藏

    收藏链接: https://www.jianshu.com/p/8ff8e71dcbc6

  7. python中的@property

    @property 可以将python定义的函数“当做”属性访问,从而提供更加友好访问方式,但是有时候setter/getter也是需要的 class People: def __init__(sel ...

  8. 软件包管理(rpm、yum、dpkg)

    一. 大多数Linux应用软件包的命名也有一定的规律,它遵循:名称-版本-修正版-类型,通常Linux应用软件的安装包有三种: 1) tar包,如software-1.2.3-1.tar.gz.以源码 ...

  9. Java并发(具体实例)——几个例子

    一步步优化页面渲染功能                                                           本节将模拟一个简单的页面渲染功能,它的作用是将HTML页面绘 ...

  10. connect to SQL Server in python on centos

    在centos 6.5 下python使用pyodbc连接sql server 报错: [unixODBC][Driver Manager]Can't open lib 'SQL Server'... ...