3 css 奖品出现弹出动画_手把手教你H5实现工厂游戏的CSS动画效果「实践」

1a8967383d5d93291eabe7e2900041f1.png

作者:吴冠禧 WecTeam

转发连接:https://mp.weixin.qq.com/s/u5GHsA0vHz8A_MmGslRw2g

0 契机与背景

今年Q1(2020年第一季度)参与了京喜事业部「京喜工厂」业务的前端开发。用户可以通过「京喜工厂」参与口罩、抽纸、大米等商品的“在线生产”,既能趣味造物,又能免费领奖品。目前可以通过「京喜」小程序首页访问该活动。

活动在上线后不久,PV 达到千万的量级,引人注目。有不少前端同学好奇里面涉及到的动画实现,文本应运而生。

「京喜工厂」项目包括了微信小程序原生页面和H5页面这两个平台,项目中使用了大量的 CSS 动画,在两个平台均可完美运行,尚未发现明显的兼容性问题。

本文就部分所涉及到的动画效果进行复盘和总结。在真实的项目实战中,手把手教你深入学习 CSS 动画的原理和实现细节。

「京喜工厂」活动首页的效果如下(截图演示):

3a0079bc313c578f2a1f9f979337ad95.png

0.0 计算机动画原理

动画是指由许多帧静止的画面,以一定的速度(如每秒16张)连续播放时,肉眼因 视觉暂留 产生错觉。要达成最基本的视觉暂留效果至少需要 10帧/秒 ,普通电影是 24帧/秒 , 普通显示器刷新频率是 60帧/秒。

18e3e49989a4b5639571dc83bfe52bd8.png

Animexample

下面的两个Gif都是用相同的6帧组成,但是播放速度不一样,10帧/秒就有点动画的效果,2帧/秒就会有卡顿的感觉。

10帧/秒:2帧/秒:

037ca6bb062c13fec550d29a8205fe8c.gif
8c9e9b82ddb8a5a221bf8628ffa87dc2.gif

1 CSS 能做多复杂的动画?

1.1 动画展示

京喜工厂小人走路动画(4倍速播放):

c35cb4b13dd3647e9fb5f377b681e307.gif

京喜工厂小人走路动画(4倍速播放)

1.2 动画描述与分析

整个动画大体上就是小人按照从右侧进入工厂,绕着工厂内一圈的方式最后从右侧出去:

4abc949fc1c71bbd4434bd078386f44d.png

京喜工厂小人路径

走路过程中会有走路的动作:

c81e80b9e5e198b4a06af7a8fe1cbc76.gif

走路的动作

注意从右走到左时吗,小人朝向右;从左走到右时,小人朝向左:

038d7114538277d3d66ac37e2d0612bb.png

朝向

路径过程中会有几个驻留点,每个点驻留一小段时间,做工作中的动作:

4cc913bb7758066372e85019c2ef1cb9.gif

工作中的动作

2 为什么要用 CSS 做复杂动画?(竞品对比 SVG 、Javascript 、CSS)

我们先来对比一下。

2.1 SVG

SVG 原生支持 SMIL(Synchronized Multimedia Integration Language), SMIL 允许你:

(1)变动一个元素的数字属性(x、y……)

(2)变动变形属性(translation或rotation)

(3)变动颜色属性 || (已废弃)

(4)物件方向与运动路径方向同步(路径动画)

其实都算是常规的动画能力,但是配合一些 SVG 专有的特性会产生一些奇妙和效果,例如 描边动画 就是利用 stroke-dasharray 和 stroke-dashoffset 实现的。另外,同为路径动画 SMIL 的 就比 CSS 的 offset-path 兼容性好很多。

8991ee08d11fb7a04e42b89e26a62b68.png

caniuse-animateMotion

微信小程序:微信小程序不支持 SVG 及 SMIL 。

2.2 Javascript

理论上, Javascript 能做任何动画。一般来说 Javascript 动画可以分为 操纵 DOM 属性的动画 和 操纵 canvas api 的动画,这两种都的原理都是通过window.requestAnimationFrame() 或者 window.setTimeout() 这类时间控制函数实现每 16.7ms 显示一帧画面,从而达成 60帧/秒 的动画。另外,还有 Web Animations API,将浏览器动画引擎向开发者打开,并由JavaScript进行操作。它是未来对网络上动画化的支持最有效的方式之一,它使浏览器可以进行自己的内部优化。但是兼容性较差。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值