canvas rotate()画布的旋转详解
2017-10-14 18:30
134 查看
刚才还是风和日丽的天,这没一会会就乌云密布了,雨呀,眼瞅就下来了呢,一场秋雨一场寒,感觉懂得要穿棉袄了的节奏
10月1号之前,还是T恤呢,10月放完国庆节和中秋节以后就开始毛衣、毛衫、毛外套了,这真的是8天过了一个季节呀~~~
大概北方的秋天都是这么快的吧
继续来看看canvas的rotate()方法
rotate()旋转当前的绘图。
语法:context.rotate(angle)
参数:angle旋转角度,以弧度计(n*Math.PI)
举例:假如想要旋转60度,可以context.rotate(Math.PI/3)进行表示;
乡亲们注意啦?开会啦?
旋转的中心是在整个画布的左上角(0,0),旋转的正方向是顺时针,旋转的反方向是逆时针,
重点:canvas中的rotate方法是绕画布左上角(0,0)进行旋转的,而且会受到translate的影响
实例效果开始:
显示效果:
![](https://img-blog.csdn.net/20171014171443608?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZGF5ZXdhbmRvdQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
逆方向旋转30度怎么写?
显示效果:
![](https://img-blog.csdn.net/20171014171741688?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZGF5ZXdhbmRvdQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
既然知道了旋转,那我们来做一个好玩的,燥起来,燥起来…..
![](https://img-blog.csdn.net/20171014183303529?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZGF5ZXdhbmRvdQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
需求:做一个旋转的矩形,并且以矩形的中心为原点,围绕原点旋转
显示效果图:
![](https://img-blog.csdn.net/20171014180118431?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZGF5ZXdhbmRvdQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
既然是持续旋转马上想到的肯定就是setInterval,每间隔5毫秒执行一次函数
在想到的就是用到canvas中的rotate()方法,让矩形旋转一定的角度
接下来遇到难点了,就是rotate旋转都是以画布的左上角为原点进行旋转的,那想让矩形围绕矩形的中心点旋转需要怎么办呢?
是不是可以把矩形的原点移到画布的原点,然后进行旋转呢?想想的效果如下图:
![](https://img-blog.csdn.net/20171014181141902?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZGF5ZXdhbmRvdQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
那么这个问题解决了,接下来就是,人家要求矩形是在画布的内部,怎样让图像移到画布的内部呢?就用到canvas translate()方法进行平移,详情可点击链接
现在移入到了canvas的内部了,就万事大吉了?
no no no 可能噩梦才刚刚开始,又出现了个bug,效果如图:
![](https://img-blog.csdn.net/20171014182046533?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZGF5ZXdhbmRvdQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
我去哪里是噩梦?感觉这个画面还挺炫的有没有?
不过它终究不是客户想要的效果,问题来了,为什么会发生重复叠加的效果?ok,没清除canvas中每次旋转的效果,所以导致图片的效果累加起来,那就需要用clearRect进行清除,那清除的其实坐标在哪里呢?这可是重点,就是矩形起点的横纵坐标+法线外面的1px虚影,所以clearRect(-151,-101,canvas.width,canvas.height);
大功告成!!!撒花撒花!!
10月1号之前,还是T恤呢,10月放完国庆节和中秋节以后就开始毛衣、毛衫、毛外套了,这真的是8天过了一个季节呀~~~
大概北方的秋天都是这么快的吧
继续来看看canvas的rotate()方法
rotate()旋转当前的绘图。
语法:context.rotate(angle)
参数:angle旋转角度,以弧度计(n*Math.PI)
举例:假如想要旋转60度,可以context.rotate(Math.PI/3)进行表示;
乡亲们注意啦?开会啦?
旋转的中心是在整个画布的左上角(0,0),旋转的正方向是顺时针,旋转的反方向是逆时针,
重点:canvas中的rotate方法是绕画布左上角(0,0)进行旋转的,而且会受到translate的影响
实例效果开始:
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title></title> <style> canvas{ border: 1px solid #000; } </style> </head> <body> <canvas width="800" height="600"></canvas> <script> var canvas=document.querySelector('canvas'); var ctx=canvas.getContext('2d'); ctx.rotate(Math.PI/6);//正方向旋转30度 ctx.fillRect(100,100,300,200); </script> </body> </html>
显示效果:
逆方向旋转30度怎么写?
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title></title> <style> canvas{ border: 1px solid #000; } </style> </head> <body> <canvas width="800" height="600"></canvas> <script> var canvas=document.querySelector('canvas'); var ctx=canvas.getContext('2d'); ctx.rotate(-Math.PI/6); ctx.fillRect(100,100,300,200); </script> </body> </html>
显示效果:
既然知道了旋转,那我们来做一个好玩的,燥起来,燥起来…..
需求:做一个旋转的矩形,并且以矩形的中心为原点,围绕原点旋转
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title></title> <style> canvas{ border: 1px solid #000; } </style> </head> <body> <canvas width="800" height="600"></canvas> <script> var canvas=document.querySelector('canvas'); var ctx=canvas.getContext('2d'); //3.把旋转的矩形平移进画布 ctx.translate(300,300); var timer=setInterval(function(){ //4.清除的点需要注意 ctx.clearRect(-151,-101,canvas.width,canvas.height); //1.定义一个旋转的方法,确定每次时间间隔中要旋转多少弧度 ctx.rotate(0.01*Math.PI); //2.绘制一个矩形,因为需求要求矩形以中心为轴进行旋转,但是canvas中rotate只能以画布左上角为轴,进行旋转 //因此,只要使矩形的中心和画布的左上角重合就可以了(起点的横纵坐标为矩形宽高的一半) ctx.strokeRect(-150,-100,300,200); },5); </script> </body> </html>
显示效果图:
既然是持续旋转马上想到的肯定就是setInterval,每间隔5毫秒执行一次函数
在想到的就是用到canvas中的rotate()方法,让矩形旋转一定的角度
接下来遇到难点了,就是rotate旋转都是以画布的左上角为原点进行旋转的,那想让矩形围绕矩形的中心点旋转需要怎么办呢?
是不是可以把矩形的原点移到画布的原点,然后进行旋转呢?想想的效果如下图:
那么这个问题解决了,接下来就是,人家要求矩形是在画布的内部,怎样让图像移到画布的内部呢?就用到canvas translate()方法进行平移,详情可点击链接
现在移入到了canvas的内部了,就万事大吉了?
no no no 可能噩梦才刚刚开始,又出现了个bug,效果如图:
我去哪里是噩梦?感觉这个画面还挺炫的有没有?
不过它终究不是客户想要的效果,问题来了,为什么会发生重复叠加的效果?ok,没清除canvas中每次旋转的效果,所以导致图片的效果累加起来,那就需要用clearRect进行清除,那清除的其实坐标在哪里呢?这可是重点,就是矩形起点的横纵坐标+法线外面的1px虚影,所以clearRect(-151,-101,canvas.width,canvas.height);
大功告成!!!撒花撒花!!
相关文章推荐
- Android 动画之RotateAnimation应用详解(旋转动画效果 )(转载)
- CSS3属性transform详解之(旋转:rotate,缩放:scale,倾斜:skew,移动:translate)
- 详解通过HTML5 Canvas实现图片的平移及旋转变化的方法
- Canvas rotate() 旋转【每日一段代码27】
- html5新增标签canvas画布基础详解及实操案例(上)
- Android canvas rotate():平移旋转坐标系至任意原点任意角度-------附:android反三角函数小结
- canvas 之旋转画布
- Android Canvas(画布)详解
- CSS3属性transform详解之(旋转:rotate,缩放:scale,倾斜:skew,移动:translate)(转载)
- CSS3属性transform详解之(旋转:rotate,缩放:scale,倾斜:skew,移动:translate)
- HTML5之Canvas绘图——Canvas画布调整之移动、缩放、旋转
- CSS3属性transform详解之(旋转:rotate,缩放:scale,倾斜:skew,移动:translate)
- Matlab图像、矩阵旋转、翻转函数 rot90、flipud、fliplr、imrotate、flipdim、flip详解
- 自学HTML5第四节(canvas画布详解)
- 【一天一个canvas】Canvas画布调整之移动、缩放、旋转(九)
- Canvas(画布)、Paint(画笔) 详解
- html5中的画布canvas---画出弧线、旋转的图形
- android canvas Rotate 图片中心旋转
- android图形系统之Canvas(画布)详解