在canvas上实现元素图片镜像翻转动画效果的方法
这篇文章主要介绍了在canvas上实现元素图片镜像翻转动画效果的方法的相关资料,内容挺不错的,现在分享给大家,也给大家做个参考。
一、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这东西,玩的前端并不多,受众有限,不比流行技术。然,古语有云,不以善小而不为,希望以后有小伙伴搜索到相关问题的时候可以提供帮助。
以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!
相关推荐:
以上是在canvas上实现元素图片镜像翻转动画效果的方法的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

在用canvas的学校有斯坦福大学、麻省理工学院、哥伦比亚大学、加州大学伯克利分校等。详细介绍:1、斯坦福大学,使用Canvas作为其主要的在线学习平台,斯坦福大学的教师和学生使用Canvas来管理和交流课程内容,并通过在线讨论、作业提交和考试等功能进行学习;2、麻省理工学院,MIT也采用了Canvas作为其在线学习管理系统,通过Canvas平台进行课程管理;3、哥伦比亚大学等

canvas箭头插件有:1、Fabric.js,具有简单易用的API,可以创建自定义箭头效果;2、Konva.js,提供了绘制箭头的功能,可以创建各种箭头样式;3、Pixi.js,提供了丰富的图形处理功能,可以实现各种箭头效果;4、Two.js,可以轻松地创建和控制箭头的样式和动画;5、Arrow.js,可以创建各种箭头效果;6、Rough.js,可以创建手绘效果的箭头等。

canvas时钟的细节有时钟外观、刻度线、数字时钟、时针、分针和秒针、中心点、动画效果、其他样式等。详细介绍:1、时钟外观,可以使用Canvas绘制一个圆形表盘作为时钟的外观,可以设置表盘的大小、颜色、边框等样式;2、刻度线,在表盘上绘制刻度线,表示小时或分钟的位置;3、数字时钟,可以在表盘上绘制数字时钟,表示当前的小时和分钟;4、时针、分针和秒针等等。

html2canvas的版本有html2canvas v0.x、html2canvas v1.x等。详细介绍:1、html2canvas v0.x,这是html2canvas的早期版本,目前最新的稳定版本是v0.5.0-alpha1。它是一个成熟的版本,已经被广泛使用,并且在许多项目中得到了验证;2、html2canvas v1.x,这是html2canvas的新版本。

探索Canvas框架:了解常用的Canvas框架有哪些,需要具体代码示例引言:Canvas是HTML5中提供的一个绘图API,通过它我们可以实现丰富的图形和动画效果。为了提高绘图的效率和便捷性,许多开发者开发了不同的Canvas框架。本文将介绍一些常用的Canvas框架,并提供具体代码示例,以帮助读者更深入地了解这些框架的使用方法。一、EaselJS框架Ea

uniapp实现如何使用canvas绘制图表和动画效果,需要具体代码示例一、引言随着移动设备的普及,越来越多的应用程序需要在移动端展示各种图表和动画效果。而uniapp作为一款基于Vue.js的跨平台开发框架,提供了使用canvas绘制图表和动画效果的能力。本文将介绍uniapp如何使用canvas来实现图表和动画效果,并给出具体的代码示例。二、canvas

tkinter canvas属性有bg、bd、relief、width、height、cursor、highlightbackground、highlightcolor、highlightthickness、insertbackground、insertwidth、selectbackground、selectforeground、xscrollcommand属性等等。详细介绍

一、美图秀秀怎么镜像翻转呢?美图秀秀镜像翻转图片教程!1.首先要在本站下载并安装美图秀秀安卓版。美图秀秀安卓版类别:拍摄美化下载美图秀秀安卓版是一款火热的图片处理美化软件,提供了丰富的照片美化工具,如把抠图放在另一个图上、去水印、换照片背景底色、裁剪、旋转、调整曝光度、饱和度等操作,以及各种滤镜和特效。美图秀秀安卓版app下载后用户还可以自由添加各种时尚的饰品和贴图,为照片添加更多的创意元素和趣味性。2.打开美图秀秀app后,点击图片美化功能。3.点击下方工具栏的编辑选项。4.最后点击旋转里的水
