4:变换(原点的偏移,缩放,变大,旋转)
###canvas中的变换
translate(x, y)
我们先介绍 translate 方法,它用来移动 canvas的原点到一个不同的位置。
translate 方法接受两个参数。x 是左右偏移量,y 是上下偏移量,
在canvas中translate是累加的
rotate(angle)
这个方法只接受一个参数:旋转的角度(angle),它是顺时针方向的,以弧度为单位的值。
旋转的中心点始终是 canvas 的原点,如果要改变它,我们需要用到 translate 方法
在canvas中rotate是累加的
scale(x, y)
scale 方法接受两个参数。x,y 分别是横轴和纵轴的缩放因子,它们都必须是正值。
值比 1.0 小表示缩小,比 1.0 大则表示放大,值为 1.0 时什么效果都没有。
缩放一般我们用它来增减图形在 canvas 中的像素数目,对形状,位图进行缩小或者放大。
在canvas中scale是累加
Scale //放大缩小改变的是画布内,CSS像素的个数,单个CSS像素占据的实际物理尺寸变大
/*
css像素是一个抽象单位
放大:
使画布内css像素的个数变少,单个css像素所占据的实际物理尺寸变大
缩小:
使画布内css像素的个数变多,单个css像素所占据的实际物理尺寸变小
* */
实例://定时旋转放大
https://github.com/Hightinstance/practice/tree/master/Transform%20_rectangle
<!DOCTYPE html>
<html><head><meta charset="UTF-8"><title></title><style type="text/css">*{margin: 0;padding: 0;}html,body{height: 100%;overflow: hidden;}body{background: pink;}#test{background: gray;position: absolute;left: 0;top: 0;right: 0;bottom: 0;margin: auto;}</style></head><body><canvas id="test" width="300" height="300"><span>您的浏览器不支持画布元素 请您换成萌萌的谷歌</span></canvas></body><script type="text/javascript">window.onload = function(){var canvas = document.querySelector("#test");var deg = 0;//角度用于旋转var flag = 1;var flagscale = 0;//放大缩小的倍数if(canvas.getContext){//获得画笔var ctx = canvas.getContext("2d");}//画笔//首先需要画一个矩形在中间,需要进行原点的移动ctx.save();//ctx.translate(150,150) //原点偏移 中心点//然后绘制矩形ctx.beginPath();//清除路径ctx.strokeRect(-75,-75,150,150);ctx.restore();//动画,定时器 定时器是异步执行的setInterval(function(){//首先把当前绘制的图形覆盖掉;清除整个画布deg++;ctx.clearRect(0,0,canvas.clientHeight,canvas.clientWidth);ctx.save();//存入当前状态//原点偏移ctx.translate(150,150);ctx.beginPath();//清除路径//旋转ctx.rotate(deg*Math.PI/180);//放大缩小if(flagscale>=100){flag = -1; //0 - 100 之间}else if(flagscale<=0){flag = 1;}flagscale+=flag;//console.log(flagscale);//ctx.scale()var scale = flagscale/50;ctx.scale(scale,scale);ctx.strokeRect(-75,-75,150,150);ctx.restore();},100)//清除路径}</script>
</html>