animation-delay负值妙用,你不来了解一下吗

简介: animation-delay负值妙用,你不来了解一下吗

🎄前言


小包上一篇文章讲述如何实现随机不规则圆角头像时,其中一种方案通过妙用

animation-delay 负值和 paused 进行实现,这不由让我对 animation-delay 负值产生巨大兴趣,经过几天的学习,我发现 animation-delay 负值的独特特性带来的威力真是非同小可。


学习本文章,你会学会:


  • animation-delay 负值特性
  • animation-delay 负值实现 bounce loading 效果
  • animation-delay 负值实现 音浪 loading 效果


💫 误区



为了更好的学会 animation-delay 负值效果,我翻看了好多大佬的博客,但我发现很多大佬对 animation-delay 设置的时间理解存在误区。


问题是这样的: 设置 animation-duration: 5s ,再设置 animation-delay: -1s ,那么请问当前动画起始位置是正常执行的 1s 还是 4s 或者是别的时间点 ?


光说不练假把式,我们来实例检验一下,为了更直观的观察到结果,动画采用 linear 匀速模式,并且使用 paused 暂停动画,使动画停留在初始位置。


  • 创建 div ,初始宽高为 0 ,背景颜色 #000
  • 添加 keyframe 动画,100% 宽高扩展为 500px


@keyframes extend {
    0% {
        width: 0;
        height: 0;
    }
    100% {
        width: 500px;
        height: 500px;
    }
}
复制代码


  • 设置 animationanimation-delay


animation: extend 5s linear paused;
animation-delay: -1s; 
/* animation-delay: -2s; */
复制代码


当设置 animation-delay-1s 时,div 初始状态为 100px*100px;设置为 -2s 时,div 初始状态为 200px*200px


📜 animation-delay 负值总结


通过上面的实例,我们可以总结出 animation-delay 负值的特性:


  1. animation-delay 设置负值的动画会立即执行
  2. 负值设置多少,动画跳过多少秒进入动画周期。以上面案例为例子,设置 -1s 时,动画就会从 1s 开始执行


animation-delay 会有何妙用那?


🏓 bounce loading


bounce loading 效果大致可以见下图

image.png

当前 loading 效果,共有两个动画组成: 小球放大缩小动画和整体旋转的动画。


小球放大缩小动画为 scale(0) -> scale(1) -> scale(0),两小球的初始位置分别为 scale(0) scale(1),两球动画同时启动。


未学习 animation-delay 负值之前,为使两球同时执行动画,因此需要编写两个动画。


.bubble-1 {
    animation: bounce 2s ease-in-out infinite;
}
.bubble-2 {
    animation: bounce2 2s ease-in-out infinite;
}
@keyframes bounce {
    0%,
    100% {
        transform: scale(0);
    }
    50% {
        transform: scale(1);
    }
}
@keyframes bounce2 {
    0%,
    100% {
        transform: scale(1);
    }
    50% {
        transform: scale(0);
    }
}
复制代码


我们从上面的代码可以看出,bouncebounce2 的代码是高度重复的,只不过颠倒了起始位置,那这样设立两组动画未免有几分多余。


咱们来回想一下 animation-delay 负值的特点: 立即执行动画;负值设置多少,动画跳过多少秒进入动画周期


这不是恰好与上面的需求契合吗?


.bubble-1,
.bubble-2 {
    animation: bounce 2s ease-in-out infinite;
}
.bubble-2 {
    animation-delay: -1s;
}
复制代码


动画执行时间为 2s ,设置 bubble-2 delay 值为 -1s ,那么 bubble-2 便从 1s 开始执行,这不就实现 bounce loading 效果了吗?


🎶 音浪loading效果


上面只有两个小球, delay 负值的强大之处没有完全展现,下面来个狠的,音浪 loading 效果的初始状态和动画效果见下图


image.png


音浪效果共有 15 个矩形组成,矩形的动画效果是纵向放大与缩小,每个矩形的初始位置不同。


矩形太多了,每个矩形都写一组动画不现实。一方面写起来太繁琐,二是动画的衔接性未必好。


大家有可能会想到另外一个方案,设置 animation-delay 正值来设置每个矩形的延迟时间,但正值没有负值立即执行的特性,初始位置会存在问题。


image.png

接下来让我们看看 animation-delay 负值的威力吧


/* load 动画 */
@keyframes load {
    0% {
        background: #531430;
        transform: scaleY(0.08);
    }
    50% {
        background: #e04960;
        transform: scaleY(1);
    }
    100% {
        background: #531430;
        transform: scaleY(0.08);
    }
}
.loader span {
    /* 动画持续时间为2.5s */
    animation: load 2.5s infinite linear;
}
/* 设置 animation-delay 负值 */
.loader span:nth-child(1),
.loader span:nth-child(15){
    animation-delay: -1.1s;
}
.loader span:nth-child(2),
.loader span:nth-child(14) {
    animation-delay: -1.3s;
}
.loader span:nth-child(3),
.loader span:nth-child(13) {
    animation-delay: -1.5s;
}
.loader span:nth-child(4),
.loader span:nth-child(12) {
    animation-delay: -1.7s;
}
.loader span:nth-child(5),
.loader span:nth-child(11) {
    animation-delay: -1.9s;
}
.loader span:nth-child(6),
.loader span:nth-child(10) {
    animation-delay: -2.1s;
}
.loader span:nth-child(7),
.loader span:nth-child(9) {
    animation-delay: -2.3s;
}
.loader span:nth-child(8) {
    animation-delay: 0s;
}
复制代码


不知道大家体会到 animation-delay 负值的强大之处吗?


🛕 源码仓库


传送门: animation-delay 负值实现 loading 效果


如果感觉有帮助的话,别忘了给小包点个 ⭐ 。




相关文章
|
10月前
|
小程序 JavaScript
小程序动画animation向左移动效果
小程序动画animation向左移动效果
62 0
SwiftUI—如何制作循环动画并指定动画的循环次数
SwiftUI—如何制作循环动画并指定动画的循环次数
595 0
SwiftUI—如何制作循环动画并指定动画的循环次数
|
2月前
|
前端开发
CSS 自测题 -- 用 flex 布局绘制骰子(一、二、三【含斜三点】、四、五、六点)
CSS 自测题 -- 用 flex 布局绘制骰子(一、二、三【含斜三点】、四、五、六点)
26 0
【sunny land】利用Animation编辑器实现近战敌人判定
【sunny land】利用Animation编辑器实现近战敌人判定
|
XML 图形学 数据格式
Animation组合动画踩坑-实现循环播放动画,可控制次数
Animation组合动画踩坑-实现循环播放动画,可控制次数
Core Animation - 发光的太阳(附高效设置图片圆角和变圆的方法)
Core Animation - 发光的太阳(附高效设置图片圆角和变圆的方法)
76 0
Core Animation - 发光的太阳(附高效设置图片圆角和变圆的方法)
Core Animation - 摇动+循环动态画圆
Core Animation - 摇动+循环动态画圆
75 0
Core Animation - 摇动+循环动态画圆
Core Animation - 如何来绘制一个火柴人
Core Animation - 如何来绘制一个火柴人
121 0
Core Animation - 如何来绘制一个火柴人
|
Web App开发 前端开发
嘿,朋友,其实 CSS 动画超简单的 - 时间函数篇(贝塞尔曲线、steps,看完还不懂算我输)
时间函数在 CSS 动画中至关重要,它会直接影响到动画的展现效果,然而由于相对其它属性而言较为复杂,可能了解的人较少,今天详细讲一讲时间函数。
|
JavaScript 开发者
动画-小球动画每次重新开始的位置说明|学习笔记
快速学习动画-小球动画每次重新开始的位置说明