You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Tailwind实现网站音乐播放时的动态图标?

用Tailwind实现音乐播放动态图标示例代码

1. 基础播放/暂停切换动画

这是最常用的交互效果,点击图标即可切换播放状态,配合平滑过渡动画:

<div class="relative w-16 h-16 cursor-pointer" id="musicToggle">
  <!-- 播放图标 -->
  <div class="play-icon absolute inset-0 flex items-center justify-center transition-all duration-300">
    <svg class="w-10 h-10 text-purple-500" fill="currentColor" viewBox="0 0 20 20">
      <path d="M6.3 2.841A1.5 1.5 0 004 4.11V15.89a1.5 1.5 0 002.3 1.269l9.344-5.89a1.5 1.5 0 000-2.538L6.3 2.84z" />
    </svg>
  </div>
  <!-- 暂停图标 -->
  <div class="pause-icon absolute inset-0 flex items-center justify-center opacity-0 transition-all duration-300">
    <svg class="w-10 h-10 text-purple-500" fill="currentColor" viewBox="0 0 20 20">
      <path d="M5.75 3a.75.75 0 00-.75.75v12.5c0 .414.336.75.75.75h2.5a.75.75 0 00.75-.75V3.75A.75.75 0 008.25 3h-2.5zM12.75 3a.75.75 0 00-.75.75v12.5c0 .414.336.75.75.75h2.5a.75.75 0 00.75-.75V3.75a.75.75 0 00-.75-.75h-2.5z" />
    </svg>
  </div>
</div>

<script>
const toggleBtn = document.getElementById('musicToggle');
const playIcon = toggleBtn.querySelector('.play-icon');
const pauseIcon = toggleBtn.querySelector('.pause-icon');

toggleBtn.addEventListener('click', () => {
  playIcon.classList.toggle('opacity-0');
  pauseIcon.classList.toggle('opacity-0');
  // 此处可添加实际音乐播放/暂停逻辑
});
</script>

说明:通过opacity-0和transition-all duration-300实现淡入淡出切换,也可替换为scale-0/scale-100实现缩放切换,按需调整。


2. 声波跳动动画(播放状态氛围感效果)

想要更有律动感觉,可以做一组错落跳动的声波条,需要先在Tailwind配置里注册自定义动画:

/** @type {import('tailwindcss').Config} */
module.exports = {
  theme: {
    extend: {
      animation: {
        'wave-1': 'wave 1s ease-in-out infinite',
        'wave-2': 'wave 1s ease-in-out 0.2s infinite',
        'wave-3': 'wave 1s ease-in-out 0.4s infinite',
      },
      keyframes: {
        wave: {
          '0%, 100%': { transform: 'scaleY(0.5)' },
          '50%': { transform: 'scaleY(1.5)' },
        },
      },
    },
  },
  plugins: [],
}

然后编写HTML部分:

<!-- 播放时显示声波,暂停时隐藏 -->
<div class="flex gap-2 items-center justify-center h-16 opacity-0 transition-opacity duration-300" id="waveContainer">
  <div class="w-2 h-8 bg-purple-500 rounded-full animate-wave-1"></div>
  <div class="w-2 h-8 bg-purple-500 rounded-full animate-wave-2"></div>
  <div class="w-2 h-8 bg-purple-500 rounded-full animate-wave-3"></div>
</div>

说明:给不同声波条设置动画延迟,实现错落跳动的效果,模拟音乐播放时的声波律动。


3. 组合完整效果(播放暂停+声波)

把上面两个效果结合,就是完整的音乐播放动态图标:

<div class="flex flex-col items-center gap-4">
  <div class="relative w-16 h-16 cursor-pointer" id="musicToggle">
    <div class="play-icon absolute inset-0 flex items-center justify-center transition-all duration-300">
      <svg class="w-10 h-10 text-purple-500" fill="currentColor" viewBox="0 0 20 20">
        <path d="M6.3 2.841A1.5 1.5 0 004 4.11V15.89a1.5 1.5 0 002.3 1.269l9.344-5.89a1.5 1.5 0 000-2.538L6.3 2.84z" />
      </svg>
    </div>
    <div class="pause-icon absolute inset-0 flex items-center justify-center opacity-0 transition-all duration-300">
      <svg class="w-10 h-10 text-purple-500" fill="currentColor" viewBox="0 0 20 20">
        <path d="M5.75 3a.75.75 0 00-.75.75v12.5c0 .414.336.75.75.75h2.5a.75.75 0 00.75-.75V3.75A.75.75 0 008.25 3h-2.5zM12.75 3a.75.75 0 00-.75.75v12.5c0 .414.336.75.75.75h2.5a.75.75 0 00.75-.75V3.75a.75.75 0 00-.75-.75h-2.5z" />
      </svg>
    </div>
  </div>

  <div class="flex gap-2 items-center justify-center opacity-0 transition-opacity duration-300" id="waveContainer">
    <div class="w-2 h-8 bg-purple-500 rounded-full animate-wave-1"></div>
    <div class="w-2 h-8 bg-purple-500 rounded-full animate-wave-2"></div>
    <div class="w-2 h-8 bg-purple-500 rounded-full animate-wave-3"></div>
  </div>
</div>

<script>
const toggleBtn = document.getElementById('musicToggle');
const playIcon = toggleBtn.querySelector('.play-icon');
const pauseIcon = toggleBtn.querySelector('.pause-icon');
const waveContainer = document.getElementById('waveContainer');

toggleBtn.addEventListener('click', () => {
  const isPlaying = playIcon.classList.contains('opacity-0');
  
  playIcon.classList.toggle('opacity-0');
  pauseIcon.classList.toggle('opacity-0');
  waveContainer.classList.toggle('opacity-0', !isPlaying);
  
  // 此处替换为你的音乐播放/暂停逻辑
});
</script>

内容的提问来源于stack exchange,提问作者Paul

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 09:12:45