var settings = {}, soundsNum, canMp3, url, i, sounds = {}, playing = false;
var createSound = function(name){ // sounds Audio sounds[name] = new Audio(); // canMp3 - mp3, // canPlayType *. // , // mp3 canMp3 = sounds[name].canPlayType("audio/mp3"); // canPlayType , // , "probably", "maybe" "". // mp3 ogg if(canMp3 === "probably" || canMp3 === "maybe") { url = settings.path + name + ".mp3"; } else { url = settings.path + name + ".ogg"; } $(sounds[name]).prop("src", url); // sounds[name].load(); // sounds[name].volume = settings.volume; // };
var playSound = function(name){ var $sound = sounds[name], playingInt; // if(typeof $sound === "object" && $sound !== null) { // settings.multiPlay. // . false, // , // if(!settings.multiPlay && !playing) { // play $sound.play(); playing = true; // , playingInt = setInterval(function(){ // , , ended, // true, if($sound.ended) { clearInterval(playingInt); playing = false; } }, 250); } else if(settings.multiPlay) { // multiPlay if($sound.ended) { $sound.play(); } else { // , , 0 // currentTime, , , // iOS , try { $sound.currentTime = 0; } catch (e) {} $sound.play(); } } } };
// , $.pluginName = function(options){ // settings = $.extend({ // sounds: [ "sound_name_1", "sound_name_2" ], // path: "sounds/", // multiPlay: true, // 0.0 - 1.0 volume: "0.5" }, options); // soundsNum = settings.sounds.length; // Audio if(typeof Audio === "function" || typeof Audio === "object") { // for(i = 0; i < soundsNum; i += 1){ createSound(settings.sounds[i]); } } // $.pluginName.play = function(name) { playSound(name); }; };
Source: https://habr.com/ru/post/194618/