LoginSignup
50
49

More than 5 years have passed since last update.

Audioタグで効果音を鳴らすシンプルな方法

Last updated at Posted at 2014-12-02

DEMO

追加しました
http://codepen.io/skwbr/full/RPgYbE/
http://codepen.io/skwbr/pen/RPgYbE

概要

例えば 'btn' というidの<a>タグのクリックで効果音を鳴らしたいとき。

HTML
<a id="btn">クリック</a>
こんな感じでaudioをbody末尾にでも書いておく
<audio id="btnsound" preload="auto">
<source src="sound/btnsound.mp3" type="audio/mp3">
</audio>
JS側ではこんな感じ(jQuery)
var se = $('#btnsound');
$('').on(_event, function(){
  se[0].currentTime = 0;
  se[0].play();
});

備考

  • currentTime = 0; を入れることで連打してもちゃんと鳴ります。
  • <audio preload="auto">とすることで、音源がプリロードされます。

プラグイン化

イベントと音源を引数にjQueryプラグイン化してみると場合によっては便利かもしれません。

jQueryプラグイン側

(function (window, $) {
  'use strict';

  $.fn.useSound = function (_event, _id) {
    var se = $(_id);
    this.on(_event, function(){
      se[0].currentTime = 0;
      se[0].play();
    });
    return this;
  };

})(this, this.jQuery);
用法
$('#btn').useSound('mousedown touchstart', '#btnsound');

追記1

  • 2015/6/12:Tweetしていただいてアクセスが増えたのでコードのリファクタリング兼ねてcodepenのDEMOを追加しました。

追記2

  • iOSやAndroidなどモバイル端末では、preload="auto"を指定していてもプリロードが効かない使用になっています(ユーザの意図や能動性に関わらずデータを読み込ませるための通信を発生させるべきでない、という思想?)。
  • clickなど、音源のトリガーとなるユーザ操作が発生して初めてロードが開始されるので、音源のファイルサイズによっては遅延する点に注意が必要です。
50
49
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
50
49