上个图先
在这个基础上实现另外的两个动画:摇摆和点击缩放。
需要了解canvas的旋转API是以左上方(0,0)为中心点进行旋转,像这样:
因此我们要进行以红包中心点为准进行旋转,需要使用另一个API:translate()来变换画布的坐标。
ctx.translate(红包左上方的x坐标 + 红包的宽度/2, 红包左上方的y坐标 + 红包的高度/2); ctx.rotate(rotate); // 要旋转的角度 ctx.translate(-红包左上方的x坐标 - 红包的宽度/2, -红包左上方的y坐标 - 红包的高度/2);复制代码
同理可得红包的缩放效果。
最后,点击红包事件监听绑定在canvas上,当点击canvas时获取鼠标的坐标,然后跟当前红包的坐标进行比对即可。
if(Math.abs(红包左上角x坐标- 鼠标x坐标) < 红包宽度 && Math.abs(红包左上角y坐标 - 鼠标y坐标) < 红包高度){ // 可做计分等功能 }复制代码
这里要注意,因为动画很快,有的时候点击红包没有反应,可以对点击的面积适当的加大一点。
贴个github ,有需要的自取,如果觉得还ok的话,点个star吧