一、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);

或者使用setTransformAPI直接矩阵变换:

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如下:

varcanvas=document.querySelector('canvas');

varcontext=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这东西,玩的前端并不多,受众有限,不比流行技术。希望以后有小伙伴搜索到相关问题的时候可以提供帮助。

作者:扣丁学堂

链接:https://www.jianshu.com/p/998709334c4f

前端实现图片快速反转替换_HTML5开发之canvas实现元素图片镜像翻转动画效果的方法...相关推荐

  1. flash图片如何镜像翻转_在canvas上实现元素图片镜像翻转动画效果的方法

    这篇文章主要介绍了在canvas上实现元素图片镜像翻转动画效果的方法的相关资料,小编觉得挺不错的,现在分享给大家,也给大家做个参考.一起跟随小编过来看看吧! 一.Canvas图片水平镜像翻转效果预览 ...

  2. 前端实现图片快速反转替换_在canvas上实现元素图片镜像翻转动画效果的方法

    一.Canvas图片水平镜像翻转效果预览 demo页面中点击图片动画效果可见. 二.Canvas上实现图片镜像翻转的实现 CSS中要想实现元素的翻转效果,比较简单,例如我们希望某一张图片水平镜像翻转, ...

  3. android设置背景图片不填充整个_Android应用开发之android解决背景图片平铺拉伸问题...

    本文将带你了解Android应用开发之android解决背景图片平铺拉伸问题,希望本文对大家学Android有所帮助 最近开发时遇到一个问题: 使用一条图片(1200x128)平铺作为背景,测试机型是 ...

  4. 前端实现图片快速反转替换_canvas实现图片镜像翻转的2种方式

    这篇文章我们来讲一下在网站建设中,canvas实现图片镜像翻转的2种方式.本文对大家进行网站开发设计工作或者学习都有一定帮助,下面让我们进入正文. 1. 通过canvas自带的画布方法进行翻转 var ...

  5. 前端实现图片快速反转替换_canvas实现图片镜像翻转 (2种方式)

    canvas实现图片的镜像翻转 1. 通过canvas自带的画布方法进行翻转var img = new Image(); //这个就是 img标签的dom对象 img.src = './sy.png' ...

  6. 前端实现图片快速反转替换_canvas像素点实现镜像翻转

    最近开发扫地机项目网站,后台实现清扫记录展示,地图和坐标需要转换才能正确显示.机器中的世界是跟我们现实图中相反的,需要Y轴翻转.网上搜罗下,大部分是小平翻转.最后在找到类似的原理的代码(https:/ ...

  7. python嵌套html开发gui_python GUI库图形界面开发之PyQt5表单布局控件QFormLayout详细使用方法与实例...

    PyQt5布局控件QFormLayout简介 QFormLayout是label-field式的表单布局,顾明思议,就是实现表单方式的布局,表单是提示用户进行交互的一种模式,主要有两列组成,第一列用于 ...

  8. css3动画图片旋转绕轴,css3图片旋转如何实现?css3实现图片旋转动画效果的方法...

    在网页中,我们经常可以看到一张图片在旋转,这样的图片旋转是怎么来实现的呢?本篇文章就来为你介绍一下关于css3实现图片旋转动画效果的方法. 实现css3中图片的旋转可以使用可以使用 -webkit-a ...

  9. android 编译fastboot,Android应用开发之Fastboot烧写Android镜像文件到eMMC

    本文将带你了解Android应用开发之Fastboot烧写Android镜像文件到eMMC,希望本文对大家学Android有所帮助. < Fastboot烧写Android镜像文件到eMMC 以 ...

最新文章

  1. 用rufus f2 制作Ubuntu16.04 U盘启动盘
  2. 微信小应用,又一大神,音乐播放器
  3. 计算机常用端口一览表
  4. excel数据透视表列名更改
  5. 实验讲解OSPF网络类型
  6. 美团外卖Android平台化的复用实践
  7. JDK源码解析之 java.lang.ClassLoader
  8. android_x86安装时遇到的问题与修改开机分辨率
  9. JBPM 3.3.0 + JBOSS 4.2.3 + ORACLE 9i
  10. Java 重载、重写(Override、Overload)
  11. 「Mac新手必备」解决 Mac 无法启动、开机的问题
  12. RTSP HTTP流媒体播放器demo
  13. Factory IO v2.5.2 Crack by Xacker
  14. 注册测绘师-大地测量与平差-衡量精度的标准
  15. tensorflow graphics详解
  16. 太原理工大学信息与计算机学院桑胜波,Direction leader: Sang Shengbo
  17. STM32用SWD口烧录程序导致锁死
  18. 小白使用backtrack5
  19. Unity-多米诺骨牌
  20. Java-ZZH1-78面试题

热门文章

  1. 研究显示每天工作超8小时得心脏病几率增加80%
  2. java判断图片是否被修改过_4种方法判断图片是否被PS处理过,你都会吗? | X的博客...
  3. 7-1 解密英文藏头诗 (15 分)
  4. PC机安装Mac OS X Snow Leopard各硬件兼容列表
  5. G1还有新生代和老年代么?
  6. 解读:全民K歌直播推荐算法
  7. NOIP2018原创模拟赛DAY1 密室
  8. PT2262/2272编解码集成电路
  9. php 控制304,php静态文件返回304技巧分享,_PHP教程
  10. iOS 越狱之后无法查看private、var等文件