html画布用函数旋转,canvas rotate()画布的旋转详解

本文详细介绍了HTML5 Canvas的rotate()方法,用于旋转绘图。旋转的默认中心点是画布左上角,可以结合translate()方法改变旋转中心,实现矩形以自身中心点为轴的旋转效果。文章通过实例代码演示了如何创建一个持续旋转的矩形,并解决旋转过程中出现的图像叠加问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

刚才仍是风和日丽的天,这没一会会就乌云密布了,雨呀,眼瞅就下来了呢,一场秋雨一场寒,感受懂得要穿棉袄了的节奏

10月1号以前,仍是T恤呢,10月放完国庆节和中秋节之后就开始毛衣、毛衫、毛外套了,这真的是8天过了一个季节呀~~~

大概北方的秋天都是这么快的吧

继续来看看canvas的rotate()方法

rotate()旋转当前的绘图。

语法:context.rotate(angle)

参数:angle旋转角度,以弧度计(n*Math.PI)

举例:假如想要旋转60度,能够context.rotate(Math.PI/3)进行表示;javascript

乡亲们注意啦?开会啦?

旋转的中心是在整个画布的左上角(0,0),旋转的正方向是顺时针,旋转的反方向是逆时针,

重点:canvas中的rotate方法是绕画布左上角(0,0)进行旋转的,并且会受到translate的影响css

实例效果开始:html

border:1px solid #000;

}

var ctx=canvas.getContext('2d');

ctx.rotate(Math.PI/6);//正方向旋转30度

ctx.fillRect(100,100,300,200);

显示效果:

d743247ea9898fc0868df0b0a263b0f6.pngjava

逆方向旋转30度怎么写?web

border:1px solid #000;

}

var ctx=canvas.getContext('2d');

ctx.rotate(-Math.PI/6);

ctx.fillRect(100,100,300,200);

显示效果:

b19a46ebfc3951e03f932255ab5d3b91.pngcanvas

既然知道了旋转,那咱们来作一个好玩的,燥起来,燥起来…..

16d583ddf47ff8907d64b4279e1ebf4a.gif

需求:作一个旋转的矩形,而且以矩形的中心为原点,围绕原点旋转svg

border:1px solid #000;

}

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);

显示效果图:

8525d49b6183e3dd46c51f645d55a2ea.png函数

既然是持续旋转立刻想到的确定就是setInterval,每间隔5毫秒执行一次函数

在想到的就是用到canvas中的rotate()方法,让矩形旋转必定的角度

接下来遇到难点了,就是rotate旋转都是以画布的左上角为原点进行旋转的,那想让矩形围绕矩形的中心点旋转须要怎么办呢?

是否是能够把矩形的原点移到画布的原点,而后进行旋转呢?想一想的效果以下图:

fc01df8ad743ef0c59903a4b7067e049.png

那么这个问题解决了,接下来就是,人家要求矩形是在画布的内部,怎样让图像移到画布的内部呢?就用到canvas translate()方法进行平移,详情可点击连接ui

如今移入到了canvas的内部了,就万事大吉了?

no no no 可能噩梦才刚刚开始,又出现了个bug,效果如图:

117e619540f9d7d3f665e6ae63d2dc23.pngspa

我去哪里是噩梦?感受这个画面还挺炫的有没有?

不过它终究不是客户想要的效果,问题来了,为何会发生重复叠加的效果?ok,没清除canvas中每次旋转的效果,因此致使图片的效果累加起来,那就须要用clearRect进行清除,那清除的其实坐标在哪里呢?这但是重点,就是矩形起点的横纵坐标+法线外面的1px虚影,因此clearRect(-151,-101,canvas.width,canvas.height);

大功告成!!!撒花撒花!!

bdf35f0ad0cb4467d497422bf8cfe1bf.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值