小tips: 在canvas上实现元素图片镜像翻转动画效果

原文地址:http://www.zhangxinxu.com/wordpress/?p=7411

一、Canvas图片水平镜像翻转效果预览
如下Gif图片:

您可以狠狠的点击这里:canvas图片水平镜像翻转动画demo

demo页面中点击图片动画效果可见。

二、Canvas上实现图片镜像翻转的实现
CSS中要想实现元素的翻转效果,比较简单,例如我们希望某一张图片水平镜像翻转,只需要一行CSS就可以了:

或者:

但是在canvas中,则要麻烦一些,麻烦的并不是无法翻转,而是坐标系的定位。

在Canvas中,如下代码可以实现资源的水平镜像翻转(假设context是Canvas的2d上下文):

或者使用setTransform API直接矩阵变换:

然而,翻转虽然实现了,但是Canvas中元素定位就出了很大的问题。这是因为Canvas的坐标变换系和CSS不一样,因此,如果我们想实现居中翻转效果,需要在翻转之前将目标元素的中心点移动到变换轴上。

拿水平翻转距离,在scale之前先translate位移变换后的水平偏移,然后就能看到一直居中翻转的效果了。

语言苍白,拿图示意一下。

canvas默认的变化坐标系是左上角。

因此,如果水平scale为1, 0.5, 0, -0.5, -1时候的最终位置如下图示意:

于是可以得到应当偏移的水平距离公式:

于是,最终镜像绘制图片的关键代码变成这样(假设水平缩放大小是scale):

如何增加动画效果呢?
我们可以借助Tween.js,https://github.com/zhangxinxu/tween

里面有各种缓动算法,借助方便调用的Math.animation()方法,就能轻松实现我们想要的效果啦!

动画JS如下:

评论 ( 0 )
最新评论
暂无评论

赶紧努力消灭 0 回复