图标动画按钮(5 款 SVG 图标交互动效)

CSSSVGJS 许可:自研原创

5 款图标动画按钮:箭头右滑、下载抖动、心形点赞弹跳、纸飞机飞出、刷新旋转,内联 SVG + 纯 CSS,心形点赞带 JS 状态切换,复制即用。

效果演示(真实可交互)

图标是按钮最好的视觉反馈载体:箭头右滑提示「还有下一步」、下载箭头抖动暗示文件即将落下、心形点赞会填充变红并弹跳(点击可切换点赞状态)、纸飞机悬停时飞起、刷新按钮持续旋转。所有图标均为内联 SVG,不依赖任何图标库。

完整代码

① 箭头右滑按钮:

<button class="btn-icon">
  <span>下一步</span>
  <svg viewBox="0 0 24 24"><path d="M5 12h14M13 6l6 6-6 6"/></svg>
</button>
.btn-icon { display: inline-flex; align-items: center; gap: 8px;
  border: 1px solid #e2e8f5; background: #fff; color: #33406b;
  padding: 11px 22px; border-radius: 12px; cursor: pointer; font-weight: 600;
  transition: all .25s ease; }
.btn-icon svg { width: 18px; height: 18px; fill: none; stroke: currentColor;
  stroke-width: 2; stroke-linecap: round; stroke-linejoin: round;
  transition: transform .3s ease; }
.btn-icon:hover { border-color: #6c8cff; color: #6c8cff; transform: translateY(-2px); }
.btn-icon:hover svg { transform: translateX(5px); }

③ 心形点赞(带 JS 状态切换):

.btn-heart.liked { color: #ff6b8a; border-color: #ffc2d2; background: #fff5f7; }
.btn-heart.liked svg { fill: #ff6b8a; stroke: #ff6b8a;
  animation: pop .45s cubic-bezier(.34,1.56,.64,1); }
@keyframes pop {
  0% { transform: scale(0); }
  60% { transform: scale(1.35); }
  100% { transform: scale(1); }
}
const heart = document.querySelector('.btn-heart');
heart.addEventListener('click', () => {
  const liked = heart.classList.toggle('liked');
  heart.setAttribute('aria-pressed', String(liked));
});

②④⑤ 款(下载、纸飞机、刷新)的动画原理相同:悬停时对 <svg> 或其子路径施加 transform / 旋转动画,完整样式见演示区 .ia-* 系列。SVG 使用 stroke: currentColor,图标颜色自动跟随按钮文字色。

参数说明

参数位置说明
图标尺寸svg 的 width/height建议 16-22px,与字号匹配
位移距离translateX(5px) 等控制动画幅度
弹跳弹性cubic-bezier(.34,1.56,.64,1)1.56 的 overshoot 产生回弹
点赞文案JS 中 textContent可改为「喜欢 / 已喜欢」等
图标路径path d="..."换任意自绘路径即可

兼容性与性能

常见问题

Q: 能商用吗? 可以。本组件与图标均为粤喵自研,免费商用无需署名。

Q: 图标颜色不跟随文字? 检查 stroke 是否写死颜色。写成 stroke: currentColor 后,图标会自动继承按钮的 color 属性。

Q: 想要线性图标变成实心怎么办? 把 fill: none 改成 fill: currentColor,同时 stroke: none,视觉即刻切换为实心风格。

Q: 点赞后刷新页面状态丢失? 把 liked 状态存到 localStorage,页面加载时读回并恢复 class 与 aria-pressed,即可实现持久化。

许可与来源

  • 许可证:自研原创 —— 粤喵自研原创,可免费用于个人与商业项目,无需署名。查看来源公示与许可清单
  • 来源:粤喵团队原创自研(从效果思路到代码实现均为独立完成,未直接复制第三方代码)
  • 首次发布: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(缓动曲线)等属性即可,代码中有注释说明。

✍️ 作者与审核