MOTION HUB

涟漪按钮

Ripple Button
#ripple-button · 47/72
HOVER · 悬停交互

参数调改

PLAYGROUND
涟漪颜色--ripple_color
文字颜色--text_color
扩散时长--dur_ms
2501200
ms
起始缩放--start_scale
0.050.6
涟漪浓度--ripple_opacity
0.10.8
涟漪直径倍率--size_factor
1.53.5

实现要点

NOTES
  1. 01

    点击时 JS 在 pointerdown 坐标处插入一个圆形 span,直径 = 按钮较长边 × 直径倍率,保证从任意点击点扩散都能盖满按钮四角。

  2. 02

    涟漪动画只动 transform 和 opacity(合成器路径),半径由元素尺寸定死、缩放交给 scale,全程零重排;animationend 后 remove 自毁,不积累 DOM。

  3. 03

    按钮 overflow:hidden + isolation:isolate 把涟漪裁进按钮内,且负层级内容不会逃逸到页面底层。

  4. 04

    直径倍率是唯一的 JS 型参数,从 CSS 变量 --size_factor 用 getComputedStyle 读取,Playground 调参后无需重新绑定事件。

  5. 05

    prefers-reduced-motion 下动画时长压到 0.01ms(涟漪闪现即逝)且自动演示停发,点击仍保留瞬时位置反馈。

  6. 06

    预览自动演示:无交互 4s 后每 2.6s 在按钮内随机位置自动泛一圈涟漪;一旦用户点击,4s 内自动演示让位。

源代码

SOURCE

加载源代码…