当前位置: 首页 > news >正文

h5引入json_Html5页面内使用JSON动画的实现

有一天我们的UI设计师找到我说,要把页面中我自己用程序写的动画,换成他们给的json动画,原因是有的动画很复杂,自己写起来达不到他们的预期效果(写到这里我突然想到一个问题,这么复杂的动画为什么不使用gif。。。。坐我对面的安卓开发小哥答因为gif播放的时候可能质量不高不流畅,好吧我信了)

我:????客户端可以加json动画,H5页面没听说过可以读json动画哎

设计师一脸肯定,说可以的,有web版本。

写到这里,我真的要好好夸一波我们的设计师妹子了,几乎很多蛮好的解决方法都是在他们的“逼迫”之下找到的(哦,她们还会写H5页面。。。要我有何用系列

那问题来了,怎么在H5页面里面使用json动画呢

这时候设计师甩了一个链接给我,看这里lottie-web ;我点进去了解了一下,是Airbnb开源的一个动画库,该库可以完成很多酷炫动画,使用起来也很简单,设计师只需要通过AE做成的动画导出JSON文件,然后前端使用Lottie直接加载JSON文件生成动画,既不需要设计师切N多gif,也不需要前端去进行复杂绘制了,一举两得,并且,Lottie全平台可用,ios、Android、web、React Native都可以,且占用内存少,加载流畅。(这么个神仙东西我为什么现在才发现。。

说了这么多,那怎么在

很简单了,设计师生成的文件夹发给你(设计师那边只用在AE中加个lottie插件,导出就行了),打开之后应该是这样子的,打开demo.html就知道是怎么用的了(所以我还在这里写什么技术文章

玩笑归玩笑,其实在使用中还是碰到了很多坑的,这里记录几个使用时注意的地方

1.demo.html里面有很多内联的东西,

仔细看一下,其实demo.html把js和json都放进去了,这时候我们可以把js和json单独分出来,js的话可以使用cdn上提供的地址

?

动画需要的

那如果你要在单独的一个html里面使用script的方式引入json文件的话,会报错,所以需要修改json文件,在前面加上变量,赋值。如下图:

这样你可以通过像引入js文件的方式一样的引入该json

?

这样可用的demo.html就缩减成了下面这样

?

当然,你如果使用的是js模块化编程的话,可以不用更改data.json,直接import进来就行了,如下:

?

2.使

之所以觉得这是个坑是因为,设计师给我的动画是全屏且非透明底的,然后她要求我将这个动画以宽度100% 高度垂直居中截取的方式定位,我在浏览器里面试了下,360*640屏幕下,宽度100%,表现形式是这样的(看上去是高度100% 宽度适配居中 两边漏出了黑色的背景色,见下图蓝色框起来的部分)

换成iPhone X的屏幕下,相反,表现出来是宽度100% 高度适配居中,上下漏出黑色背景色,见下图蓝色框起来的部分(究其原因是因为iphonex屏幕较长

这个布局好熟悉哇,跟img的object-fit属性取值为contain的时候表现一致(object-fit也是宝藏,有兴趣的同学可以去研究一下,非常好用)

我这里解决设计师的需求主要增加下面的代码:

?

最终效果:

总结

以上图片截图都是静态的,实际是有一个动态效果的,我不知道怎么添加动图就没弄了,感兴趣的可以试一下。

适用范围:我感觉一般全屏的或者局部很复杂的动画可以使用这个方法一试,比gif要流畅,兼容性也做得不错,一些安卓产品比较酷炫的开屏就是使用的这个方法,H5页面的话,简单动画一般自己程序实现就可以,还可以避免踩坑。

参考链接:

lottie官网

lottie-web github地址

相关文章:

  • bootstrap列表加序号_用vue.js做一个列表,类似于百度的搜索排名,用v-for来循环...
  • 中将2个map的值合并_如果是我,不纠结卫生间留1个还是2个,主卫次卫大合并,宽敞舒适...
  • 宋佳机器人_丝路电影节|宋佳专访:特殊时期用电影抚慰人心 是很温暖的事
  • ipv4的地址位数_网络基础之IP地址和子网掩码
  • 城市运行一网统管_民主监督 | 城市运行“一网统管”,“啄木鸟”在行动
  • 能够编辑excel的python 软件有哪些_平面设计包括哪些软件,常用的设计软件都有哪些...
  • rs232串口防雷电路_【ZYNQ Ultrascale+ MPSOC FPGA教程】第十一章 RS232实验
  • 无偿献血机器人_广州首家有机器人的献血屋开业啦!快来体验吧!
  • go 标准错误输出_Linux入门-标准输出和错误输出
  • 找网络高手联系方式_怎么才能联系到网络高手(找网络高手联系方式)
  • 修改用户名_看过来,中华古诗词网络大赛注册及修改用户名通知!
  • 修改串口设备名ttymxc1_011. 有人串口服务器设置方法
  • python输出字符串列表_python学习之字符串、列表
  • python操作oracle多实例数据库_Python操作Oracle数据库的简单方法和封装类实例
  • 动态改变iview样式_重学前端基础:样式操作的方式,包括内部样式,行内样式...
  • 2017 年终总结 —— 在路上
  • 230. Kth Smallest Element in a BST
  • Js基础——数据类型之Null和Undefined
  • js正则,这点儿就够用了
  • node-glob通配符
  • php ci框架整合银盛支付
  • Python 基础起步 (十) 什么叫函数?
  • Redis学习笔记 - pipline(流水线、管道)
  • Spark in action on Kubernetes - Playground搭建与架构浅析
  • WinRAR存在严重的安全漏洞影响5亿用户
  • 电商搜索引擎的架构设计和性能优化
  • 分布式事物理论与实践
  • 如何解决微信端直接跳WAP端
  • 微信公众号开发小记——5.python微信红包
  • 一起来学SpringBoot | 第三篇:SpringBoot日志配置
  • 最简单的无缝轮播
  • 新年再起“裁员潮”,“钢铁侠”马斯克要一举裁掉SpaceX 600余名员工 ...
  • ​LeetCode解法汇总518. 零钱兑换 II
  • ​软考-高级-系统架构设计师教程(清华第2版)【第20章 系统架构设计师论文写作要点(P717~728)-思维导图】​
  • ###项目技术发展史
  • (13)Hive调优——动态分区导致的小文件问题
  • (cos^2 X)的定积分,求积分 ∫sin^2(x) dx
  • (delphi11最新学习资料) Object Pascal 学习笔记---第2章第五节(日期和时间)
  • (LeetCode 49)Anagrams
  • (附源码)php投票系统 毕业设计 121500
  • (附源码)ssm基于jsp的在线点餐系统 毕业设计 111016
  • (附源码)计算机毕业设计ssm基于Internet快递柜管理系统
  • (附源码)计算机毕业设计SSM基于健身房管理系统
  • (附源码)小程序 交通违法举报系统 毕业设计 242045
  • (剑指Offer)面试题34:丑数
  • (未解决)jmeter报错之“请在微信客户端打开链接”
  • (转)eclipse内存溢出设置 -Xms212m -Xmx804m -XX:PermSize=250M -XX:MaxPermSize=356m
  • (转)创业的注意事项
  • (转)总结使用Unity 3D优化游戏运行性能的经验
  • .bat批处理(四):路径相关%cd%和%~dp0的区别
  • .net core开源商城系统源码,支持可视化布局小程序
  • .NET/C# 获取一个正在运行的进程的命令行参数
  • [ CTF ] WriteUp-2022年春秋杯网络安全联赛-冬季赛
  • [51nod1610]路径计数
  • [ai笔记9] openAI Sora技术文档引用文献汇总