漏斗过滤加载动画(Funnel Loader 液体下渗)

CSSJS 许可:自研原创

漏斗过滤加载动画,三角形漏斗内蓝色液体反复下渗,漂浮颗粒随液面下沉,底部水滴依次滴落,完整还原"过滤"过程,支持三套配色、调速与暂停,纯 CSS 零依赖。

效果演示(真实可交互)

漏斗由入口、锥形斗身与细管嘴三段组成,蓝色液体从满到见底反复循环,液体中的白色颗粒随之沉底,管嘴下方三颗水滴错峰坠落,把”过滤筛选”的过程演得清清楚楚。蓝 / 紫 / 红三套配色。

正在过滤数据…

配色
速度 1.0×

完整代码

HTML 结构:

<div class="fu-funnel">
  <span class="fu-top"></span>                          <!-- 漏斗入口 -->
  <span class="fu-body">                                <!-- 锥形斗身 -->
    <span class="fu-liquid"></span>                     <!-- 液体 -->
    <span class="fu-float f1"></span>                   <!-- 漂浮颗粒 -->
    <span class="fu-float f2"></span>
  </span>
  <span class="fu-spout"></span>                        <!-- 管嘴 -->
</div>
<div class="fu-drops"><i></i><i></i><i></i></div>       <!-- 底部水滴 -->

CSS 核心:

/* 锥形斗身:clip-path 直接切出漏斗形状 */
.fu-body {
  position: relative; width: 128px; height: 96px;
  clip-path: polygon(0 0, 100% 0, 58% 100%, 42% 100%);
  background: #c9d2e8; overflow: hidden;
}

/* 液体:从满到只剩 22% 再瞬间回满,模拟下渗 */
.fu-liquid {
  position: absolute; left: 0; right: 0; bottom: 0; height: 100%;
  background: linear-gradient(180deg, #7ab8ff, #4f8cff);
  animation: fu-drain 2.6s ease-in-out infinite;
}
@keyframes fu-drain {
  0%   { height: 100%; }
  62%  { height: 22%; }   /* 液体见底 */
  78%  { height: 22%; }   /* 底部停顿一下 */
  100% { height: 100%; }  /* 瞬间回满,开始下一轮 */
}

/* 底部水滴:与液体下渗同周期,错峰坠落 */
.fu-drops i {
  width: 9px; height: 9px; border-radius: 50%; background: #4f8cff;
  opacity: 0; animation: fu-drop 2.6s ease-in infinite;
}
.fu-drops i:nth-child(2) { animation-delay: .47s; }
.fu-drops i:nth-child(3) { animation-delay: .88s; }
@keyframes fu-drop {
  0%   { transform: translateY(-8px) scale(.5); opacity: 0; }
  12%  { opacity: 1; }
  55%  { transform: translateY(26px) scale(.9); opacity: 0; }
  100% { transform: translateY(-8px) scale(.5); opacity: 0; }
}

参数说明

参数位置说明
下渗周期--fu-dur一轮”满→空→满”的时长,默认 2.6s
漏斗角度clip-path 的 58%/42%两值越接近 50%,漏斗越尖
液面最低点fu-drain 的 22%数值越大,残留液体越多
底部停顿62% → 78%见底后的停留时长,制造”滴完再续”节奏
颗粒位置.fu-float 的 left分散在液体不同水平位置更有层次
水滴错峰animation-delay建议与下渗周期错开 0.15-0.9s 均匀分布

兼容性与性能

常见问题

Q: 液体回满时为什么是”瞬跳”而不是倒流? 这是刻意设计——真实过滤是单向的,瞬跳回满能表达”新一批数据又进来了”;若想倒流,把 keyframes 改成 height 从 22% 线性回到 100% 并加 ease-out 即可。

Q: 颗粒在液体见底后还在动,有点违和? 把 fu-sink 的透明度关键帧与 fu-drain 对齐:颗粒在液体见底(62%)时同步 opacity: 0,就不会”浮空”了。

Q: 想要更立体的漏斗? 给 .fu-body 加同形状的深色投影层(另一个 clip-path 的伪元素,向下偏移 4px),或给斗身加左明右暗的线性渐变模拟光照。

Q: 漏斗尖部液体颜色太深/太浅? 液体是渐变填充,尖部自然更窄更浓;把渐变改为同一色相深浅差更小的两色(如 #5b8ff7 → #4f8cff),观感会更均匀。

许可与来源

  • 许可证:自研原创 —— 粤喵自研原创,可免费用于个人与商业项目,无需署名。查看来源公示与许可清单
  • 来源:粤喵团队原创自研(从效果思路到代码实现均为独立完成,未直接复制第三方代码)
  • 首次发布:2026-09-01 · 最近更新:2026-09-01
  • 修改日志:2026-09-01 首次发布;2026-09-13 补充许可证与来源标注、复制按钮说明与法务页入口
  • 纠错:联系页面 / min@cactus.asia,2 个工作日内核实处理

常见问题

这个组件可以商用吗?

可以。本组件为粤喵自研原创,可免费用于个人和商业项目,无需署名。

浏览器兼容性如何?

支持所有现代浏览器(Chrome / Firefox / Safari / Edge 最新版本)。旧版 IE 不支持 CSS 动画相关特性。

怎么修改动画参数?

直接调整 CSS 中的 animation-duration(时长)、animation-timing-function(缓动曲线)等属性即可,代码中有注释说明。

✍️ 作者与审核