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