zoukankan      html  css  js  c++  java
  • 变换

    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>
    

      

  • 相关阅读:
    &与&&的区别
    jsp之response方法
    一个数组先按照某个属性的大小排序,如果大小一样的就按照名称排序
    CSS内部div设置上min-height或max-height滚动条就会出现在父元素上
    300行代码手写简单vue.js,彻底弄懂MVVM底层原理
    JavaScript简单手写观察者模式
    javascript中replace还可以这样玩
    VUE中通过改变key去更新局部dom
    element中select的change方法如何传多个参数
    react打包中不想要sourceMap,但是在命令里加'GENERATE_SOURCEMAP=false'后windows下报错'GENERATE_SOURCEMAP' 不是内部或外部命令,也不是可运行的程序 或批处理文件。
  • 原文地址:https://www.cnblogs.com/love-life-insist/p/9136588.html
Copyright © 2011-2022 走看看