本文へスキップ

オーディオプレーヤー

音楽プレーヤーカード。グラデーションのジャケット、曲名/アーティスト、再生・前後スキップ、ドラッグできる進捗バーと時間表示、再生中に揺れるイコライザーバーを備える。

プレビュー

クリック

操作クリック/タップで動きます。

仕様書

向く場面
  • 音楽・ポッドキャストの再生カード
  • 曲名・ジャケットと一緒に見せる再生 UI
  • <audio> の標準 UI を置き換えるとき
避ける場面
  • 標準コントロールで足りる効果音・短い音声
  • 多数の曲を一覧で並べる画面
  • <audio> へ結線しない見た目だけの利用
構成要素
  • ジャケット
  • イコライザ
  • 曲名・アーティスト
  • シークバー
  • 時間表示
  • 前後・再生ボタン
持っている状態
  • 通常
  • ホバー
  • フォーカス
  • 押下中
キーボード

Tab で前後・再生ボタンとシークバーに到達。シークバーで←→ 5秒・Home/End で端・Space/Enter で再生切替。ボタンは Enter/Space

支援技術

シークは role=slider+aria-valuenow・aria-valuetext(時刻)。再生ボタンの aria-label は再生/一時停止に更新。ジャケットと EQ は aria-hidden。reduce で EQ を静止

動き

再生中は 5本の EQ バーが 0.62〜1.02s で伸縮。ノブは押下で 1.15 倍 120ms。進捗は rAF 更新。曲送りは即時

デザインの要点

  • EQ の5本は周期を 0.62〜1.02s でばらす。同じ周期だと一斉に伸び縮みして波形ではなく点滅に見える
  • 「前へ」は 3 秒以降なら曲頭へ戻り、それより前で前の曲へ。1回押しで戻り、2回押しで前の曲という音楽プレーヤーの慣習
  • 再生ボタンだけ 52px の塗り、前後は 44px の透明。押す頻度の差を大きさと色で見せる
  • 曲送りで cur を 0 に戻し aria-valuetext も更新する。総時間が曲ごとに違うので % だけでは位置が伝わらない
実装メモ

実際の音声は使わず、JSのタイマーで進捗を進める疑似再生です。実装時は <audio> 要素に置き換え、progress を timeupdate/currentTime、シークを currentTime、時間を duration に差し替えてください。ジャケットは linear-gradient のダミー表現です。

コード(コピーして使えます)

<div class="ap" id="ap">
  <div class="ap-art" aria-hidden="true">
    <div class="ap-art-glow"></div>
    <div class="ap-eq" id="apEq">
      <span></span><span></span><span></span><span></span><span></span>
    </div>
  </div>

  <div class="ap-meta">
    <p class="ap-title">真夜中のシグナル</p>
    <p class="ap-artist">Lumina / Nightdrive</p>
  </div>

  <div
    class="ap-seek"
    id="apSeek"
    role="slider"
    tabindex="0"
    aria-label="再生位置"
    aria-valuemin="0"
    aria-valuemax="100"
    aria-valuenow="0"
    aria-valuetext="0:00 / 4:12"
  >
    <div class="ap-track">
      <div class="ap-fill" id="apFill"></div>
      <div class="ap-knob" id="apKnob"></div>
    </div>
  </div>
  <div class="ap-times">
    <span id="apCur">0:00</span>
    <span id="apDur">4:12</span>
  </div>

  <div class="ap-controls">
    <button class="ap-btn" id="apPrev" type="button" aria-label="前の曲">
      <svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true">
        <path d="M18 5.5v13l-9-6.5 9-6.5z" fill="currentColor"/>
        <rect x="6" y="5.5" width="2.4" height="13" rx="1" fill="currentColor"/>
      </svg>
    </button>
    <button class="ap-btn ap-btn--play" id="apPlay" type="button" aria-label="再生">
      <svg class="ap-ic-play" width="24" height="24" viewBox="0 0 24 24" fill="none" aria-hidden="true">
        <path d="M7 4.5v15l12-7.5-12-7.5z" fill="currentColor"/>
      </svg>
      <svg class="ap-ic-pause" width="24" height="24" viewBox="0 0 24 24" fill="none" aria-hidden="true">
        <rect x="6" y="4.5" width="4" height="15" rx="1.2" fill="currentColor"/>
        <rect x="14" y="4.5" width="4" height="15" rx="1.2" fill="currentColor"/>
      </svg>
    </button>
    <button class="ap-btn" id="apNext" type="button" aria-label="次の曲">
      <svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true">
        <path d="M6 5.5v13l9-6.5-9-6.5z" fill="currentColor"/>
        <rect x="15.6" y="5.5" width="2.4" height="13" rx="1" fill="currentColor"/>
      </svg>
    </button>
  </div>
</div>

タグ

同じカテゴリ「メディア・画像」のほかのパーツ

関連パーツ