一、Canvas图片水平镜像翻转效果预览
您可以狠狠的点击这里:canvas图片水平镜像翻转动画demo
demo页面中点击图片动画效果可见。
二、Canvas上实现图片镜像翻转的实现
CSS中要想实现元素的翻转效果,比较简单,例如我们希望某一张图片水平镜像翻转,只需要一行CSS就可以了:
img { transform: scaleX(-1); }
或者:
img { transform: scale(-1, 1); }
但是在canvas中,则要麻烦一些,麻烦的并不是无法翻转,而是坐标系的定位。
在Canvas中,如下代码可以实现资源的水平镜像翻转(假设 context 是Canvas的 2d 上下文):
context.scale(-1, 1);
或者使用 setTransform API直接矩阵变换:
context.setTransform(-1, 0, 0, 1, 0, 0);
然而,翻转虽然实现了,但是Canvas中元素定位就出了很大的问题。这是因为Canvas的坐标变换系和CSS不一样,因此,如果我们想实现居中翻转效果,需要在翻转之前将目标元素的中心点移动到变换轴上。
拿水平翻转距离,在 scale 之前先 translate 位移变换后的水平偏移,然后就能看到一直居中翻转的效果了。
语言苍白,拿图示意一下。
canvas默认的变化坐标系是左上角。
因此,如果水平 scale 为 1 , 0.5 , 0 , -0.5 , -1 时候的最终位置如下图示意:
于是可以得到应当偏移的水平距离公式:
distance = (canvas.width – image.width * scale) / 2;
于是,最终镜像绘制图片的关键代码变成这样(假设水平缩放大小是 scale ):
// 坐标参考调整 context.translate((canvas.width - image.width * scale) / 2, 0); context.scale(scale, 1); context.drawImage(image, 0, 0); // 坐标参考还原 context.setTransform(1, 0, 0, 1, 0, 0);
如何增加动画效果呢?
我们可以借助Tween.js , https://github.com/zhangxinxu/tween
里面有各种缓动算法,借助方便调用的 Math.animation() 方法,就能轻松实现我们想要的效果啦!
Math.animation(form, to, duration, easing, callback);
动画JS如下:
var canvas = document.querySelector('canvas'); var context = canvas.getContext('2d'); // 动画进行 Math.animation(1, -1, 600, 'Quad.easeInOut', function (value, isEnding) { // 清除画布内容 context.clearRect(0, 0, canvas.width, canvas.height); // 调整坐标 context.translate((canvas.width - canvas.width * value) / 2, 0); // 调整缩放 context.scale(value, 1); // 绘制此时图片 context.drawImage(eleImg, 0, 0); // 坐标参考还原 context.setTransform(1, 0, 0, 1, 0, 0); });
三、结束语
又是一篇冷文,canvas这东西,玩的前端并不多,受众有限,不比流行技术。然,古语有云,不以善小而不为,希望以后有小伙伴搜索到相关问题的时候可以提供帮助。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
更新日志
- 黑神话悟空上品鼠弩手精魄获取方法一览|上品鼠弩手精魄收集攻略
- 中国音乐地图听见世界非物质文化遗产《非遗HQCD》wav
- 中国民乐合奏作品集《华夏之音HQ》头版限量编号[WAV+CUE]
- [电影原声带]黎允文《天将雄师》[FLAC+CUE]
- 曝NS继任机型已进入量产阶段:已花了30亿日元
- 不是Switch2?曝《马里奥惊奇》NS捆绑包即将公开
- 暖心任天堂!网友Switch维修返还时贴纸被完好保留
- 《国语老歌 经典对唱情歌 2CD》[WAV/分轨][1.1GB]
- 《刀郎 翻唱精选华语专辑 披着羊皮的狼 》[WAV+CUE][430MB]
- 《真的田震 中国乐坛红极一时的歌者 精品集》[WAV+CUE][300MB]
- 群星.1995-新滚石九大天王之情歌大全【滚石】【WAV+CUE】
- 群星.1993-滚石九大天王十二出好戏·纵夏欢唱【滚石】【WAV+CUE】
- 群星.1993-滚石九大天王十二出好戏·贺岁齐唱【滚石】【WAV+CUE】
- 黑神话悟空上品虫校尉精魄获取方法一览|上品虫校尉精魄收集攻略
- 《指环王:夏尔的传说》推迟至2025年初发行