的图片怎么循环渲染_十分钟教你做个炫酷的图片切换过度效果

61c3cbd1fa5b8f588069ef34e8817fb8.png61c3cbd1fa5b8f588069ef34e8817fb8.png61c3cbd1fa5b8f588069ef34e8817fb8.png做个炫酷的图片切换过度效果

首先,今天是520节日。到了520这类为情侣准备的节日,小编都会感到一万点暴击……

b7d0f4fb975d35317b3a425d80d6b0a6.png

首先酸一波,搞点事情(蹭波热度)。

给大家分享一个520特效页面:看完记得回来为小编点个赞哦!

d2d5c1d32b32ac6356ebca942d167bc5.gif

e753922accd98c9a64e60e7ae131e0c9.gif

这是案例

请扫

a86c6b304a8471a8e2635cf8078ab7f2.png8901f95d15c46c35da806f5eda1bd737.gif

前言

老规矩,直接上效果。看看是什么样的效果吧。看完效果我们在去看实现。

另外附上github地址:

https://github.com/Darylxyx/css-collection/tree/master/fragment

本来这个效果是我3年前做的,只是当时是用无数个 div 标签完成的,性能比较成问题,在移动端完全跑不动。最近心血来潮想学习一个做 CSS 效果很厉害的大神用纯 CSS 实现,无奈功力不够只能放弃,最终选择用 canvas 来完成了。

ea3b90b64df3fabb49777b284259722e.png

准备工作

1.首先准备相同尺寸的图片若干张,本例中图片尺寸均为 1920 * 1080(注意:这里的尺寸是原始图片的尺寸,不是通过 css 显示在页面上的尺寸)。为方便之后的使用,将这些图片加入 HTML 中一隐藏元素里备用。

34c5aaa3b3a574388e00089d11587dcc.png

9dd266f742190741950cadb3073e06b8.png

2.在 HTML 中插入 canvas 画布,尺寸自定,但必须保证与图片资源宽高比一致。本例中画布尺寸为 800 * 450。

b834b0ecb735683e97b6b6ac7e2f9a60.png

3.基础代码如下,首先获取画布的 context 对象;其次获取图片对象;最后通过 drawImage 方法将图片绘制出来。

0a629ccf2e666d8c80651e59aa6883a2.png

实现

相信很多人看完很快就能明白,这是用若干个小的单元组合在一起,每个单元只负责绘制图片的一小部分,最后拼在一起就成了一张完整的图片。

那么在具体讲解源码之前,先让我们来复习一下 canvas 中 drawImage 函数的用法。由于我们需要用到该函数9个参数的情况,参数较多,需要牢记这些参数的意义和参考的对象。

144592962585ae509c88a758f765a88e.png

· img:规定要使用的图像、画布或视频

· sx:开始剪切的 x 坐标位置

· sy:开始剪切的 y 坐标位置

· swidth:被剪切图像的宽度

· sheight:被剪切图像的高度

· x:在画布上放置图像的 x 坐标位置

· y:在画布上放置图像的 y 坐标位置

· width:要使用的图像的宽度

· height:要使用的图像的高度

我相信即使将上面这些参数罗列出来,在开发的时候还是很容易晕。这里推荐给大家一个小技巧:除去第一个 img 参数以外还有8个参数,其中前4个参数的尺寸参考的对象是原图,即 1920 * 1080;后4个参数的尺寸参考的对象是画布,即 800 * 450。

记住这个口诀,在实际编写的时候就不容易晕了。

分格

分格是要定下在画布中一个单元的尺寸,最重要的是单元尺寸可以被画面的两条边长所整除,即单元尺寸应为画面宽高的公约数。公约数不一定是最大公约数或最小公约数,因为过大效果不够炫,过小性能会有压力。

以本例画板 800 * 450 的尺寸为例,我这里选取 25 * 25 为单元尺寸,即整个画布由 32 * 18 共 576 个单元格组成。分好格之后我们需要先计算一些基本的参数备用。

bb0b1d4db96124441c523e3b498b0a69.png

前三组参数是我们之前定下的,需要注意的,在算第四组行/列数时要清楚:行数 = 画布高度 / 单元格高度;列数 = 画面宽度 / 单元格宽度。如果这点搞反了,后面就蒙逼了。最后一组 DW/DH 是放大换算到原图上的单元格尺寸,用于后面裁切图片使用。

绘制

循序渐进,我们先绘制最左上角的那个单元格。因为其原图裁切位置与画布摆放位置都是 (0, 0),所以最简单。

fdf343c8229faa90f5f2a49404acb7cf.png

3ea150f46a1be41c9f3ef2ff35187c26.png

成功了。那现在要绘制第2行,第3列的图片该怎么写呢。

71f710ba1c20aff0bd50f4a62e022129.png

这里容易搞混的是:裁剪或摆放的横坐标为单元格宽度 * 列号,纵坐标为单元格高度 * 行号。

19e09e1a248a3de8fee4ef8377bdb8c6.png

为了方便,封装一个负责渲染的纯净函数,其不参与逻辑,只会根据传入的图片对象及坐标进行绘制。

4d5c59fc77f411d87dee647b0f04cfbc.png

封装好渲染方法之后,通过行数和列数的双重循环把整张图片渲染出来。

1a0a93d181e621735cc451e35e3460f2.png

633da5ecd66333d811e6d1e7a1b865a6.png

完美~。其实到这一步核心部分就完成了,为什么呢?因为此时这幅图片已经是由几百个单元格拼合而成的,大家可以凭借天马行空的想像赋予其动画效果。

在分享自己的动画算法之前,先给大家看下拼错是什么样的~

a67bcb8e28b9c8779397b83524e7acae.png

还有点炫酷~

动画算法

下面分享下我的动画算法。Demo 里的效果是怎么实现的呢?

由于在画布的网格上,每个单元格都有行列号(i,j)。我希望能给出一个坐标(i,j)后,从近到远依次得出坐标周围所有菱形上的点。具体如下图,懒得做图了~

2c7e4b3225c6ed25f599a673a5785e89.png

比如坐标为(3,3)

距离为 1 的点有(2,3)、(3,4)、(4,3)、(3,2)共4个;

距离为 2 的点有(1,3)、(2,4)、(3,5)、(4,4)、(5,3)、(4,2)、(3,1)、(2,2)共8个;

........

求出这一系列点的算法也很容易, 因为菱形线上的点与坐标的 行号差值的绝对值 + 列号差值的绝对值 = 距离,具体如下:

3fc8988167bc968ae4e3f5c06b91e352.png

该函数用于给定坐标和距离(dst),求出坐标周围该距离上的所有点,以数组的形式返回。但是上面的算法少了边界限制,完整如下:

edc2068c694a25260f1b1e4751ae2209.png

这样我们就有了一个计算周围固定距离上所有点的纯净函数,接下来就开始完成动画渲染了。

首先编写一个用于清除单元格内容的清除函数,只需要传入坐标,就能清除该坐标单元格上的内容,等待之后绘制新的图案。

5a587f3b7f220f277d6e1746cb1f6f59.png

anotherImg 为下一张图,最后通过 setInterval 不断向外层绘制新的图片完成碎片式的渐变效果。

e50cdb85c3c8ba3785eaa60f49b8b4fd.png

当 countAround 返回的数组长度为0,即到坐标点该距离上的所有点都在边界之外了,就停止定时器循环。至此所有核心代码已经介绍完毕。

现在给定画布上任意坐标,就能从该点开始向四周扩散完成碎片式的图片切换效果。

在自动轮播时,每次从预设好的8个点(四个角及四条边的中点)开始动画,8个点坐标如下:

f7155b87abc7244164dd86a6ea00b175.png

点击时,则算出点击所在单元格坐标,从该点开始动画。

e942bcdbb0aeb09f5f77263ebe5e91bd.png

感谢你的浏览,希望能有所帮助!!

内容来源:

http://www.cnblogs.com/ghost-xyx/p/7240282.html

14b246c3f00075078270caf28831836c.png

咳咳,最后。。。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/489852.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《自然》:修复AI神经网络的缺陷

来源:王宏琳科学网博客我在上一篇《海外观察》博客中,介绍了纽约大学马库斯教授和戴维斯教授的新书《重启 AI:构建我们可以信任的人工智能》和图灵奖得主朱迪亚•珀尔的著作《为什么:关于因果关系的新科学》。这两本书都分析了以深…

三. 自动化测试用例设计

1. 主要内容: 2. 手工测试用例与自动化测试用例区别 目前自动化测试更多的时候是定位在冒烟测试和回归测试; 冒烟测试执行的是主体功能点的用例。回归测试执行全部或部分的测试用例。3. 测试类型 4. 异常 5. WebDriver错误截图 get_screenshot_as_f…

c++卸载工具_win7系统如何卸载office2007兼容包

win7系统如何卸载office2007兼容包?office2007是一款热门的办公软件,但有的朋友不习惯使用office2007,但是一些说电脑安装office2007软件后,想要更换其他版本的话,此前需要将office2007卸载掉,不知怎么卸载office2007…

人工智能伦理如何设定,从种群层面看人类的知识积累和进化

前言:9月份中宣部出版局《中国图书评论》对《崛起的超级智能》进行了推荐和评论,对其中阐述的种群知识库扩展观点给予了重点关注。应该说种群知识库扩展是互联网大脑架构不断发展的抽象推论,这个推论对于人工智能及其伦理的建立也应有相应的价…

python可以这样学读后感_Python基础教程的读后感10篇

《Python基础教程》是一本由Magnus Lie Hetland著作,人民邮电出版社出版的平装图书,本书定价:69.00元,页数:471,文章吧小编精心整理的一些读者的读后感,希望对大家能有帮助。 《Python基础教程》…

光通信的再思考:5G流量爆发下的数据密度革命

来源:未来智库1.投资要件区别于市场的观点:(1)市场对 5G 时代流量爆发的认知不足。市场认为当前大带宽高流量新应用的爆发趋势尚不明显,当前流量增长需求不清。我们认为,5G 时代的流量的爆发将会是数十倍的…

玩家可以输入辅助指令_最后生还者 第二部辅助功能详解 盲人玩家也能玩

顽皮狗首席系统设计师Matthew Gallant,今天在Playstation Blog公开了《最后生还者 第二部》中辅助功能的详情。他们表示从设计之初,他们就希望有更多的粉丝能够体验到这款作品。在《神秘海域4:盗徒末路》的基础上,《TLOU2》提供了…

为什么深度学习如此容易被愚弄?AI研究员正在努力修复神经网络缺陷

来源:nature假设一辆自动驾驶汽车看到停车标志时并没有减速,而是加速驶入了繁忙的十字路口,从而导致了交通事故。事故报告显示,停车标志的表面粘了四个小的矩形标志。这说明一些微小扰动就能愚弄车载人工智能(AI&#…

.net core image怎么保存_C# 将PDF转为多种Image图像文件格式(Png/Bmp/Emf/Tiff)

PDF是一种在我们日常工作学习中最常用到的文档格式之一,但常常也会因为文档的不易编辑的特点,在遇到需要编辑PDF文档内容或者转换文件格式的情况时让人苦恼。通常对于开发者而言,可选择通过使用组件的方式来实现PDF文档的编辑或者格式转换&am…

h5课件制作_PPT新功能!竟然还能用来制作H5

原标题:PPT新功能!竟然还能用来制作H5最近几年随着移动端的快速发展,我们获取信息的途径更加便捷了,我们几乎每天都会刷微博、看朋友圈。而在众多的信息传递中,H5页面成了最受大众欢迎的形式。所谓的H5,简单…

Nature重磅发现:神经活动影响人类寿命!

来源:中国生物技术网北京时间10月17日,发表在《Nature》上的一篇新研究中,来自美国哈佛医学院的科学家发现,长期以来与从痴呆症到癫痫等疾病有关的大脑神经活动,在人类衰老和寿命方面也发挥着作用。这项基于人脑、小鼠…

bootstrap 富文本_入坑吗?说说几个富文本编辑器

也许,你时常会遇到要开发基于Web的文本编辑器的情况。有时候,只需实现一个简约且轻量级的应用程序,不必有其他任何不必要的功能。因此,总能找到一种工具,来创建符合用户需求和资金要求的在线文本编辑器。本文将简要介绍…

战略 | 分析这25家千亿美元市值企业后,发现了这些趋势......

文章来源 |《哈佛商业评论》图片来源 | 网络编辑 | 智慧云导读:本文发表在《哈佛商业评论》上,作者通过对几百家卓越的公司进行相关调查研究,发现这些公司在其成功的数十年间采用的战略始终符合3个基本法则。本文在此基础上,对相关…

bs 程序用户个性化设置保存_想更改win10设置,这12种打开方法你不可不知,方便又快捷...

“设置”应用程序是Windows 10中最有用和最重要的应用程序之一,我们设置帐户、应用程序、系统、设备、网络和Internet、个性化、时间和语言、更新和安全等等都要通过它来进行。由于我们使用此应用程序比系统中的任何其他应用程序都要多,所以我们要熟悉打…

AR普及后的未来是怎样的?

来源:ARC增强现实 AR普及后的未来是怎样的?知名投资机构A16Z合伙人Ben Evans曾描绘AR未来场景:我会在你头顶上看到你的LinkedIn资料卡;收到Salesforce提示说你是一个重要的目标客户; Truecaller会提示说你打算向我推销…

python基础100_python基础100题

有四个数字:1、2、3、4,能组成多少个互不相同且无重复数字的三位数?各是多少? def test_01(): count 0 num_lst [] for i in range(1, 5): for j in range(1, 5): for k in range(1, 5): if (i ! j) & (j ! k) and (i ! k):…

oracle数据库启动

遇到个白痴问题,放假停电,回来时启动数据库,发现无法进入oracle管理员界面。 如下输入,但是显示的命令无效。 [oraclecrm001 database]$ sqlplus / as sysdba bash: sqlplus: command not found 后来查百度知道问题的原因&#xf…

图灵测试还重要吗?

撰文丨Harry Collins(卡迪夫大学社会学教授)来源丨原理(ID:principia1687)1我们正在步入人工智能时代。随着人工智能程序越来越擅长像人类般行事,我们也越来越多地面临这样一个问题:人类的智能是…

mysql 禁止使用enum_MySQL慎用 ENUM 字段

前言:在网上看了很多文章,大家都是推荐 MySQL 要慎用 ENUM 字段,但是原理感觉还是有点模糊。今天我们就从官网来818这些东西1、关于 ENUM 迁移的问题?这里引用别人的一段话:但ENUM带来的问题也不少,比如数据…

2019年雁栖湖会议重大科学问题面向全球发布

来源:中国科学杂志社10月13日,由中国科学院学部和北京市政府联合举办的2019年度雁栖湖会议在北京怀柔开幕。中国科学院副院长张亚平、北京市委副秘书长郑登文以及来自国内外免疫学领域的院士、著名专家学者和中国科学院大学、中国科学院微生物所的师生等…