注册
web

手把手教你实现一个自动倒啤酒的效果

前言


继上次实现一个汽车运货的效果后,这次我就带大家来实现一个自动倒酒的效果,纯CSS实现,十分简单,没有花里胡哨的技巧。话不多说,咱们直接进入主题。


效果预览


最终实现的相关效果如下。


HTML部分


首先看到HTML部分。相关代码如下。


 <div class="container">
<div class="keg">
<span class="handle"></span>
<span class="pipe"></span>
</div>
<div class="glass">
<span class="beer"></span>
</div>
</div>

这里定义了一个啤酒桶(keg)和玻璃杯(glass)的容器结构,通常用于模拟倒啤酒的动画场景。


.container 是最外层容器,用于定位整个啤酒桶和玻璃杯的组合。 .keg(啤酒桶) 包含两个子元素分别是 .handle(啤酒桶的金属把手)以及 .pipe(出酒管道)。 .glass(玻璃杯) 包含  .beer 元素,表示杯中的啤酒液体,通常通过CSS动画模拟啤酒被倒入的效果。


CSS部分


由于这里的效果涉及了很多动画效果,并且作为该效果的主要功能是倒酒,所以我们在这里主要介绍动画相关的CSS部分,即是如何实现倒酒。相关代码如下。


这里是类名为flow的动画部分,相关代码如下。


@keyframes flow {
0%, 15% {
top: 40px;
height: 0;
}

20% {
height: 115px;
}

40% {
height: 75px;
}

55% {
top: 40px;
height: 50px;
}

60%, 100% {
top: 80px;
height: 0;
}
}

这个动画的整体效果是液体从无到有爆发式流出 → 流量逐渐减少 → 最后滴落消失,通过 height 变化模拟液体体积变化,通过 top 调整模拟液体位置移动(如滴落时的垂直位移)。最后再不断循环。


初始状态(0%, 15%) 液体不可见(高度为0),准备开始流动。液体开始流出(20%) 液体高度突然增加(从0到115px),模拟液体从管道中快速涌出。液体减少(40%) 液体高度降低(从115px到75px),模拟流量减小。液体即将流尽(55%) 液体顶部位置回弹(可能模拟最后几滴液体下落),高度进一步减小。液体完全消失(60%, 100%) 液体高度归零,同时顶部位置下移(top: 80px),模拟液体完全流尽或滴落。


最后就是handle,slide的动画部分,相关代码如下。


@keyframes handle {
10%, 60% {
transform: rotate(0deg);
}

20%, 50% {
transform: rotate(-90deg);
}
}
@keyframes slide {
0% {
left: 0;
filter: opacity(0);
}

20%, 80% {
left: 300px;
filter: opacity(1);
}

100% {
left: 600px;
filter: opacity(0);
}
}

这里定义了两个关键帧动画:handle(把手旋转)  和 slide(水平滑动淡入淡出)


把手旋转动画模拟把手(如啤酒桶开关)的来回扳动效果。在 0%-10% 保持初始状态(0deg)。在20% 快速逆时针旋转到-90deg(如打开阀门)。在50% 仍保持-90deg(持续打开状态)。在60% :回到0deg(关闭阀门)。


水平滑动动画 实现元素从左侧滑入、暂停、再滑出并淡出的效果。在 0% 元素从左侧(left: 0)透明状态开始。在 20%-80% 滑动到中间(left: 300px)并完全显示。在 100% 继续滑到右侧(left: 600px)并淡出。


最后就是fillup,fillup-foam,wave的动画部分,相关代码如下。


@keyframes fillup {
0%, 20% {
height: 0px;
border-width: 0px;
}

40% {
height: 40px;
}

80%, 100% {
height: 80px;
border-width: 5px;
}
}
@keyframes fillup-foam {
0%, 20% {
top: 0;
height: 0;
}

60%, 100% {
top: -15px;
height: 15px;
}
}

@keyframes wave {
from {
transform: skewY(-3deg);
}

to {
transform: skewY(3deg);
}
}

这里定义了三个关键帧动画,用于模拟液体(如啤酒)倒入容器时的动态效果,包括液体上升、泡沫生成和液体表面波动。


液体填充动画 模拟液体从空杯到满杯的填充过程。在 0%-20% 容器为空(高度为0)。在 40% 液体快速上升至半满(40px)。在 80%-100% 液体完全填满(80px),同时显示容器边框(如玻璃杯厚度)。


泡沫生成动画 模拟液体倒满时产生的泡沫层。在 0%-20% 无泡沫(高度为0)。在 60%-100% 泡沫在液体顶部形成并略微溢出(top: -15px)。通过 top 负值实现泡沫“溢出”杯口的视觉效果。


液体波动动画 模拟液体表面的轻微波动(如倒入后的晃动)。通过 skewY 实现Y轴倾斜变换,产生波浪效果。通常需配合 animation-direction: alternate 让动画来回播放。


总结


以上就是整个效果的实现过程了,纯 CSS 实现,代码简单易懂。另外,感兴趣的小伙伴们还可以在现有基础上发散思维,比如增加点其他效果,或者更改颜色等等。关于该效果如果大家有更好的想法欢迎在评论区分享,互相学习。最后,完整代码在码上掘金里可以查看,如果有什么问题大家在评论区里讨论~


作者:一条会coding的Shark
来源:juejin.cn/post/7502329326098366473

0 个评论

要回复文章请先登录注册