创建交错动画的不同方法
基本动画很简单:定义关键帧、命名动画、应用于元素。但有时需要更复杂的技巧才能达到理想的动画效果。例如,声音均衡器可能对每个条形使用相同的动画,但它们是交错的,以产生独立动画的错觉。
最近在构建仪表板时,希望其中一个小部件的项目以交错动画的方式显示。
就像上面的声音均衡器一样,我开始使用:nth-child
选择器。我使用无序列表(<ul></ul>
)作为父容器,赋予它一个类,并使用:nth-child
伪选择器来通过animation-delay
偏移每个列表项的动画。
.my-list li { animation: my-animation 300ms ease-out; } .my-list li:nth-child(1) { animation-delay: 100ms; } .my-list li:nth-child(2) { animation-delay: 200ms; } .my-list li:nth-child(3) { animation-delay: 300ms; } /* 以此类推 */
此技术确实可以很好地交错项目,特别是如果您知道列表中在任何给定时间有多少项目。但是,当项目数量不可预测时(这正是我为仪表板构建的小部件的情况),这种方法就会失效。我确实不想每次列表中项目数量发生变化时都返回到这段代码,所以我编写了一个快速的 Sass 循环,它最多可以处理 50 个项目,并随着每个项目的增加而增加动画延迟:
.my-list { li { animation: my-animation 300ms ease-out; @for $i from 1 through 50 { &:nth-child(#{$i}) { animation-delay: 100ms * $i; } } } }
这应该可以解决问题!然而,感觉太笨拙了。当然,它不会给文件增加太多重量,但是您知道编译后的 CSS 将包含许多未使用的选择器,例如 nth-child(45)
。
一定有更好的方法。通常我会求助于 JavaScript 来查找所有项目并添加延迟,但是……这次我花了一些时间探索一下是否可以用 CSS 独自完成。
CSS 计数器怎么样?
我首先想到的是将 CSS 计数器与 calc()
函数结合使用:
.my-list { counter-reset: my-counter; } .my-list li { counter-increment: my-counter; animation-delay: calc(counter(my-counter) * 100ms); }
不幸的是,这行不通,因为规范说明计数器不能在 calc()
中使用:
calc()
表达式的组件可以是字面值或attr()
或calc()
表达式。
事实证明,一些人喜欢这个想法,但它还没有超出草案阶段。
数据属性怎么样?
在阅读了规范的摘录后,我了解到 calc()
可以使用 attr()
。并且,根据 CSS 值和单位规范:
在 CSS3 中,
attr()
表达式可以返回许多不同类型的值
这让我想到;也许数据属性可以解决问题。
- Item 1
- Item 2
- Item 3
- Item 4
.my-list li { animation-delay: calc(attr(data-count) * 150ms); }
但是我的希望破灭了,因为这个的浏览器支持非常糟糕!
此浏览器支持数据来自 Caniuse,其中包含更多详细信息。数字表示浏览器在该版本及更高版本中支持该功能。
桌面
移动/平板电脑
所以,回到绘图板。
自定义属性怎么样?
我的下一个想法是使用 CSS 自定义属性。它并不漂亮,但它有效了 ?
事实证明它也很灵活。例如,动画可以反转:
它还可以做一些完全随机的事情 并且 同时动画元素:
我们甚至可以更进一步,做一个对角线挥动:
浏览器支持并没有那么糟糕(戳戳 Internet Explorer)。
此浏览器支持数据来自 Caniuse,其中包含更多详细信息。数字表示浏览器在该版本及更高版本中支持该功能。
桌面
移动/平板电脑
CSS 的一个很棒的功能是它会忽略它不理解的东西,这要归功于级联。这意味着所有内容都将一起动画到视图中。如果这不是您的风格,您可以添加一个功能查询来覆盖默认动画:
.my-list li { animation: fallback-animation; } @supports (--variables) { .my-list li { animation: fancy-animation; animation-delay: calc(var(--animation-order) * 100ms); } }
原生 CSS 万岁
我越停下来问自己是否需要 JavaScript,就越惊讶于 CSS 本身可以做什么。当然,如果 CSS 计数器可以在 calc()
函数中使用,那将是一个非常优雅的解决方案。但就目前而言,内联自定义属性提供了一种强大而灵活的方法来解决此问题。
以上是创建交错动画的不同方法的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

您是否曾经在项目上需要一个倒计时计时器?对于这样的东西,可以自然访问插件,但实际上更多

在元素个数不固定的情况下如何通过CSS选择第一个指定类名的子元素在处理HTML结构时,常常会遇到元素个数不�...

关于Flex布局中紫色斜线区域的疑问在使用Flex布局时,你可能会遇到一些令人困惑的现象,比如在开发者工具(d...

格子呢是一块图案布,通常与苏格兰有关,尤其是他们时尚的苏格兰语。在Tartanify.com上,我们收集了5,000多个格子呢
