73 lines
2.2 KiB
JavaScript
73 lines
2.2 KiB
JavaScript
function Звуки(ключники, события) {
|
|
this.создать = function() {
|
|
this.задано = {};
|
|
this.аудио = {};
|
|
события.подписать(this);
|
|
var тут = this;
|
|
ключники.push(function(ключ, путь, значение) {
|
|
тут.обработатьКлюч(ключ, путь, значение);
|
|
});
|
|
};
|
|
|
|
this.обработатьКлюч = function(ключ, путь, значение) {
|
|
if (!путь[0].startsWith("звуки"))
|
|
{
|
|
return;
|
|
}
|
|
|
|
var имя = путь[1];
|
|
var свойство = путь.slice(2).join(".");
|
|
|
|
if (!this.задано[имя])
|
|
{
|
|
this.задано[имя] = {};
|
|
}
|
|
this.задано[имя][свойство] = значение;
|
|
};
|
|
|
|
this.обработатьСобытие = function(событие) {
|
|
for (var имя in this.задано)
|
|
{
|
|
var значения = this.задано[имя];
|
|
if (!значения.файл)
|
|
{
|
|
continue;
|
|
}
|
|
for (var свойство in значения)
|
|
{
|
|
if (свойство.startsWith("события"))
|
|
{
|
|
var значение = значения[свойство];
|
|
if (событие == значение)
|
|
{
|
|
this.воспроизвести(значения.файл, значения.повторять);
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
|
|
this.воспроизвести = function(файл, повторять)
|
|
{
|
|
if (!this.аудио[файл])
|
|
{
|
|
this.аудио[файл] = new Audio(файл);
|
|
}
|
|
var звук = this.аудио[файл];
|
|
звук.pause();
|
|
звук.currentTime = 0;
|
|
звук.play();
|
|
|
|
if (повторять)
|
|
{
|
|
звук.onended = function() {
|
|
звук.play();
|
|
}
|
|
}
|
|
};
|
|
|
|
// Конструктор.
|
|
this.создать();
|
|
}
|