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>