CSS 缓动函数是一种用于控制 CSS 动画过渡效果的函数,可以让动画变得更加自然。这篇文章将介绍一种新的 CSS easing function,即 linear(),它可以模拟出更复杂的缓动效果,文中demo请在chrome 113+中观看。

什么是 easing function?

在动画中,有一种叫做“缓动效果”的技术,它可以让动画变得更加自然。在实现缓动效果时,通常会使用 easing function。easing function 是一种函数,它可以将动画的进度(通常是一个 0 到 1 之间的数字)映射为动画的值。

在 CSS 中,可以使用 easing function 控制 CSS 动画的过渡效果。在 CSS 中,可以使用 transition-timing-function 属性来指定 easing function。例如:

.element {
transition-property: width;
transition-duration: 1s;
transition-timing-function: linear;
}

在这个示例中,transition-timing-function 属性的值为 linear,这意味着动画的过渡效果将呈现线性的变化。在动画中,同样有一个animation-timing-function属性来控制动画的缓动效果。除了 linear 这个关键字之外,还有linear, ease, ease-in, ease-out, ease-in-out等关键字,以及cubic-bezier(p1, p2, p3, p4), steps(n, )等函数。今天我们要说的是一种新的缓动函数 linear(),注意和前面的关键字 linear 区分

linear缓动函数的语法

.demo { }

假设我们有一个动画,要在3s内对一个div放大到原来的10倍:

linear(0, 1) //等同于关键字linear
linear(0, 0.9, 1) // 0-1.5s 放到到9倍,1.5s-3s放大到10倍
linear(0, 0.5 20%, 0.8 60%, 1) // 0-20%的时间 放到到5倍,20%-60%的时间放大到8倍,最后放大到10倍

画出图来分别是这样的:

img { width: 200px; display: inline-block; margin-right: 20px }

linear
linear(0, 1)
linear(0, 0.9, 1)
linear(0, 0.5 20%, 0.8 60%, 1)

See the Pen linear() by imgss (@imgss)
on CodePen.

linear()模拟跳动效果

虽然我们在上面最多只有4个关键点,但是linear函数可以接收更多的关键点参数来实现更复杂的动画,比如跳动效果。如果你使用过animate.css 的 bounceInDown效果,会发现直接使用之前的CSS的缓动函数是比较难以实现的。在animate.css的实现里面, 是使用一系列关键帧再加上cubic-bezier缓动函数来实现的:

@keyframes bounceInDown {
from,
60%,
75%,
90%,
to {
animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
} 0% {
opacity: 0;
transform: translate3d(0, -3000px, 0) scaleY(3);
} 60% {
opacity: 1;
transform: translate3d(0, 25px, 0) scaleY(0.9);
} 75% {
transform: translate3d(0, -10px, 0) scaleY(0.95);
} 90% {
transform: translate3d(0, 5px, 0) scaleY(0.985);
} to {
transform: translate3d(0, 0, 0);
}
} .bounceInDown {
animation-name: bounceInDown;
}

现在有了linear()缓动函数,我们可以在一个关键帧的情况下再结合linear缓动函数来实现:

linear(
0, 0.063, 0.25 18.2%, 1 36.4%, 0.813, 0.75, 0.813, 1, 0.938, 1, 1
);

See the Pen linear() by imgss (@imgss)
on CodePen.

上面的缓动函数对应的图像如下:



很明显,如果让我们手写这样一个linear函数还是比较复杂的,好在有大佬帮我们做了一个生成工具:https://linear-easing-generator.netlify.app/

兼容性

最后来看看兼容性,目前在chrome 113+可用,暂时还不能用于生产,但两年应该就可以愉快地使用了,本文完

参考文档

聊聊CSS 缓动函数的新成员linear()的更多相关文章

  1. JS —— 轮播图中的缓动函数的封装

    轮播图的根本其实就是缓动函数的封装,如果说轮播图是一辆跑动的汽车,那么缓动函数就是它的发动机,今天本文章就带大家由简入繁,封装属于自己的缓动函数~~ 我们从需求的角度开始,首先给出一个简单需求: 1. ...

  2. GSAP JS基础教程--使用缓动函数

    今天来了解一下缓动easeing函数. 开始,如果你还没有GSAP的类包,可以到GreenSock的官网去下载最新版本的类包,或者直接点击这里​来下载 学习之前,先来准备一下:     <!DO ...

  3. NGUI缓动函数

    缓动函数:http://easings.net/zh-cn 研究NGUI的博客:http://dsqiu.iteye.com/category/295721

  4. iOS基本动画/关键帧动画/利用缓动函数实现物理动画效果

    先说下基本动画部分 基本动画部分比较简单, 但能实现的动画效果也很局限 使用方法大致为: #1. 创建原始UI或者画面 #2. 创建CABasicAnimation实例, 并设置keypart/dur ...

  5. Silverlight动画学习笔记(三):缓动函数

    (一)定义: 缓动函数:可以将自定义算术公式应用于动画 (二)为什么要用缓动函数: 您可能希望某一对象逼真地弹回或其行为像弹簧一样.您可以使用关键帧动画甚至 From/To/By 动画来大致模拟这些效 ...

  6. EaseType 缓动函数

    EaseType(动画曲线) EaseType 缓动函数或者我习惯叫它动画曲线,在很多的软件或动画中都有涉及到,下面是摘取的一些资料: 缓函数图例 Tween效果 每一幅图像当鼠标移上去,会有路径效果 ...

  7. 支持xcode6的缓动函数Easing以及使用示例

    支持xcode6的缓动函数Easing以及使用示例 用xcode6新建工程后,直接导致不支持之前的Easing缓动函数的代码,经过修改后就可以正常使用了,虽然比不上POP高大上的动画,但用缓动函数的动 ...

  8. WPF中的动画——(四)缓动函数

    缓动函数可以通过一系列公式模拟一些物理效果,如实地弹跳或其行为如同在弹簧上一样.它们一般应用在From/To/By动画上,可以使得其动画更加平滑. var widthAnimation = new D ...

  9. JS动画之缓动函数分析及动画库

    上一篇讲了JS动画定时器相关知识,这一篇介绍下缓动函数及流行的动画库. 熟悉的图 实际使用 jquery animate()+jquery.easing插件的使用: $(selector).anima ...

  10. Tween + 缓动函数

    Unity-Tween http://www.cnblogs.com/MrZivChu/p/UnityTween.html iTween: iTween大解构(一)之抛物线移动 http://blog ...

随机推荐

  1. Salesforce Sharing And Visibility 零基础学习(一)基础知识篇

    本篇参考: https://trailhead.salesforce.com/en/users/strailhead/trailmixes/architect-sharing-and-visibili ...

  2. MyBatis 重点知识归纳

    一.MyBatis 简介 [1]MyBatis 是支持定制化 SQL,存储过程以及高级映射的优秀持久化框架.[2]MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取查询结果集.[3 ...

  3. kafka rebalance你真的了解吗

    介绍 今天主要分享一下 kafka 的 rebalance,在 kafka 中,rebalance 是一个十分重要的概念,很多时候引发的一些问题可能都是由于 rebalance 引起的,rebalan ...

  4. 你需要知道的Symbols

    著名symbol 著名symbol是一个在不同领域中都相同且未注册的symbol.如果我们要列出著名symbol,它们会是: Symbol.iterator Symbol.toStringTag Sy ...

  5. 【Deep Learning】DDPM

    DDPM 1. 大致流程 1.1 宏观流程 1.2 训练过程 1.3 推理过程 2. 对比GAN 2.1 GAN流程 2.2 相比GAN优点 训练过程更稳定,损失函数指向性更强(loss数值大小指示训 ...

  6. CentOS8删除boot目录恢复

    系统安装完之后,boot分区最好做一个备份,因为这个分区 我们基本不会动它,所以备份一次一劳永逸,以防万一.如果我们不小心 误删除了这个目录,也不用慌,正因为这个分区,我们除了开机 其他时候基本用不到 ...

  7. 升级二进制kubernetes集群

    升级二进制kubernetes集群 背景介绍 最近由于时间不足,暂时无法对小版本更新第一时间出新的文档.若需要升级集群版本,可以参考此文档进行操作,每个节点一个一个地更新.大版本更新请各位持续关注我的 ...

  8. python入门教程之三编码问题

    1编码问题 Python文件中如果未指定编码,在执行过程中会出现报错: !/usr/bin/python print ("你好,世界") 以上程序执行输出结果为: 文件" ...

  9. JavaScript的引入方式

    外部JS文件 deno.js alert('你好!JavaScript'); JS引入方式.html <!--方式一:内部脚本--> <!--标签不能自闭和--> <sc ...

  10. 6.Get和Post

    1.概述 URL是一个资源描述符,一个URL用于描述一个网上资源 Get用于获取/查询资源信息,Post用于更新资源信息 2.联系和区别 2.1.Get后退刷新无害,Post需要重新提交: 2.2.G ...