• 变换


    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>
    

      

  • 相关阅读:
    Jquery $().each()与$.each(data,function(i,obj))区别
    「人生最好的境界」​​写出我心(九十)
    「金融市场里的推销」​写出我心(八十九)
    「错误」写出我心(八十八)
    「马丁路德·金的名言」写出我心(八十七)
    「眼界」​​​​​​​​​​​写出我心(八十六)
    「一个人真正成年的三大标志」写出我心(八十五)
    「如何降低事件对你的伤害」​​​​​​​​​​写出我心(八十四)
    「眼界的重要性」​​​​​​​​​写出我心(八十三)
    「平视所有优秀的人」​​​​​​​​写出我心(八十二)
  • 原文地址:https://www.cnblogs.com/love-life-insist/p/9136588.html
Copyright © 2020-2023  润新知