今天重新翻看《CSS 揭秘》“过渡与动画”一章,并把该章代码重新敲了一遍,代码托管在我的Github,在此总结一些心得。

动画的奥秘

在网页中添加动画的目的是让用户有更加优质的用户体验,为了达到目标,我们需要让动画满足两点目标:

  • 意料之外
  • 情理之中

其中,意料之外是指动画要让用户感到新奇有趣,最好是产生惊喜(这归功于好的设计灵感),而情理之中是指动画要符合用户的直觉,具体来说,就是动画需要符合用户对物理世界物体运动规律的心智模型,这需要Web开发者来实现。

如何做到呢?终于进入正题了,答案是通过以下两点:

  1. 回弹效果:物体运动不会突然终止,会因为惯性而继续向前运动一段距离;
  2. 缓动曲线(又名贝塞尔曲线):指定动画在整段时间中以怎样的速率推进;

代码库中的“弹跳动画”Demo说明了如何通过以上两点创建逼真的小球掉落动画。

对于回弹效果是我们在做动画时需要想到的一点,而使用缓动曲线可以让我们很好的实现回弹效果,在CSS中,设定缓动曲线的方式如下:

animation-timing-function: cubic-bezier(.87, .11, 1, .81);

这里讲解一下animation-timing-function属性,用来指定动画的运动速率,有一下几个值:ease(default),ease-inease-outease-in-out和上面提到的自定义函数。

你一定还是不明白缓动曲线是什么,别急,看下面这张图:

这基本上是animation-timing-function: ease的贝塞尔曲线图,它的横坐标为时间,纵坐标是进程,从图中我们可以得出这样的结论:“如果动画整个持续时间为2秒,那么在动画开始1秒(一半时间)时,整个动画已经完成了80%”。

停下,闭上眼,深呼吸,想想看在这种曲线下我们的动画会经历怎样的过程,答案是它一开始会非常快,然后逐渐慢下来。

有点感觉了吗?(如果没有的话请多对照着上图图,脑子里想象小球掉落的画面。)

看到这里,我已经默认你已经明白设置缓动曲线对于做出逼真动画的意义了,那么接下来的问题便是如何做到,毕竟cubic-bezier函数看起来一点都不好设置。

放轻松,拿上我给你的这个轮子,在贝塞尔函数的海洋中兴风作浪吧:cubic-bezier。

再多说几句:贝塞尔曲线

如果你像我一样不满足上面的内容,那就跟我一起讨论一下cubic-beizer这个函数里的四个值分别是什么?我们回到刚才那张图:

注意,我为这张图添加了坐标单位,无论横轴还是纵轴,原点的值都是0,而终点的坐标值都是1,顺便一提,这个贝塞尔曲线转换为CSS属性为:

transition-timing-function: cubic-bezier(.21, .07, .41, 1)

发现了吗,前两个参数值分别是起始锚点的横,纵坐标,后两个参数分别是终止锚点的横,纵坐标。什么?你问我锚点是什么,这个就说来话长了,而且我认为没有什么说明的意义,反正你知道了还是要用我给你的工具生成这四个坐标的。

但是,注意,我可以这样设置一个贝塞尔曲线:

transition-timing-function: cubic-bezier(.76, -0.68, .68, 1.56)

这个设置对应的贝塞尔曲线图如下:

看到了吗,贝塞尔曲线的一部分突破了坐标系,我们的函数参数值也出现了负值与大于1的值,这又会发生什么?

答案是动画会在超出坐标系的范围里继续运动相应的量,如果你希望小球最终掉落至300px,那么在曲线超出纵轴的范围内,小球掉落的距离要大于300px(具体取决于偏离纵轴的程度)。

知道这个有什么用呢?答案是知道这个原理可以帮助我们节省一些回弹动画,通过这个原理,我们可以在贝塞尔曲线函数层面上实现简单的“回弹效果”,具体可以参考代码仓库中“弹性过渡”Demo。

转载于:https://www.cnblogs.com/libinfs/p/7743469.html

再谈CSS动画 - 说点不知道的(一)贝塞尔曲线相关推荐

  1. android沿曲线移动,Android动画学习Demo(3) 沿着贝塞尔曲线移动的Property Animation

    Property Animation中最重要,最基础的一个类就是ValueAnimator了.Property Animation利用ValueAnimator来跟踪记录对象属性已经变化了多长时间及当 ...

  2. android 飘心动画(直播点赞)效果(二)---贝塞尔曲线的实现

    上篇文章 android 飘心动画(直播点赞)效果 只有代码,没有相关的说明.因为我自己也没有看懂,所以参照网上另一篇关于贝塞尔曲线实现 飘心动画的效果,目的就是 便于理解上篇文章代码的思路,然后写个 ...

  3. 再谈 CSS 预处理器

    CSS 预处理器是什么?一般来说,它们基于 CSS 扩展了一套属于自己的 DSL,来解决我们书写 CSS 时难以解决的问题: 语法不够强大,比如无法嵌套书写导致模块化开发中需要书写很多重复的选择器: ...

  4. html设定元素动画执行,CSS动画 _Animation 教程_W3cplus

    本文是为帮助您入门和熟悉CSS动画而编写的,使用它们来为您带来基于Web的接口以及为艺术带来生命.虽然W3C的CSS动画规范仍在修订中,但是如今它已经有大量的内容可以供我们使用了. 对我而言,CSS动 ...

  5. 三谈属性动画——Keyframe以及ViewPropertyAnimator

    Android动画和Transition系列文章 初识属性动画--使用Animator创建动画 再谈属性动画--介绍以及自定义Interpolator插值器 三谈属性动画--Keyframe以及Vie ...

  6. CSS动画中的贝塞尔曲线

    前言 最近在学习CSS动画,其中动画时间函数的部分涉及到了贝塞尔曲线的相关知识.对于这部分知识,之前一直没有好好学习过,正好借着这个机会学习下. 1. 贝塞尔曲线 首先简单介绍下贝塞尔曲线. 贝塞尔曲 ...

  7. 前端动画之贝塞尔曲线推导及应用

    hello,大家好,今天豆皮范儿给大家带来了贝塞尔曲线推导和应用,优美的贝塞尔曲线想起了大学时候老师在给我们讲如何实现,如何推导,如何实现和应用.本来也来详细介绍一下,纯纯的干货- 作者:lff 生活 ...

  8. html5贝塞尔曲线,用canvas绘制一个曲线动画——深入理解贝塞尔曲线

    前言 在前端开发中,贝赛尔曲线无处不在: 它可以用来绘制曲线,在svg和canvas中,原生提供的曲线绘制都是使用贝赛尔曲线 它也可以用来描述一个缓动算法,设置css的transition-timin ...

  9. Android把商品添加到购物车的动画效果(贝塞尔曲线)

    当我们写商城类的项目的时候,一般都会有加入购物车的功能,加入购物车的时候会有一些抛物线动画,具体代码如下: 实现效果如图: 思路: 确定动画的起终点 在起终点之间使用二次贝塞尔曲线填充起终点之间的点的 ...

最新文章

  1. DevOps火爆,招人却太难了!
  2. 全面分析阿里数据中台,小白也能看懂 | CSDN原力计划
  3. com.android.vivi删除,vivi命令详解
  4. Oracle 数据库整理表碎片
  5. python word 1_Python word | 学步园
  6. postman-常见问题解决方案记录
  7. 天猫京东618下单金额近万亿;中国 5G 毫米波芯片研发成功;阿里P8招聘私人助理被辞退 | EA周报...
  8. 提高电脑开机速度的方法
  9. 人人网登陆(selenium、PtantomJS结合)
  10. 交换技术三种重要的交换
  11. day03数据包拓展——抓包封包
  12. 香港 “一卡通”業務收費表
  13. 华为测试工程师实习面试——技术面+综合面
  14. mfc显示html单元格,HTML/CSS中可直接输数据的表格
  15. 【小菜虫的学习笔记--n5x刷机root】
  16. 极光 · 底层逻辑 · doubleの浮点误差
  17. 李俊“从良”碰壁,黑客的路有多长
  18. Diagnostics - DID, DTC区别与联系
  19. 菜鸟初学freenas
  20. Mybatis(见资源)

热门文章

  1. MS SQL开发命名规则
  2. ICCV2021 比MoCo更通用的对比学习范式,中科大MSRA提出对比学习新方法MaskCo
  3. ICCV2021 人脸深伪分析挑战赛 重磅来袭
  4. 有故事、有实践,谈一谈深度迁移学习方法的基本思路
  5. 多媒体领域顶会,ACM MM 2020 会议论文下载
  6. 【Matplotlib】【Python】如何使用matplotlib颜色映射
  7. 收藏 | 深度学习调参有哪些技巧?
  8. C++ Primer 第五版 第6章 6.1——函数及函数定义及调用阅读笔记
  9. 基础知识(四)Dijkstra算法
  10. windows下安装TensorFlow(CPU版)