forked from sanabutton/sanabutton.github.io
-
Notifications
You must be signed in to change notification settings - Fork 0
/
button-odanobu.js
71 lines (56 loc) · 1.93 KB
/
button-odanobu.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
var syncerSounds = {
flag: {},
currentTime: null,
};
document.addEventListener("DOMContentLoaded", function () {
/** @var ボタン要素のクラス名 */
var soundButtonClassName = "sounds";
/** @var 音声ファイルがあるフォルダ。末尾に `/` を含む */
var soundsBasePath = "https://www.natorisana.love/sounds-odanobu/";
/** @var 停止ボタンに付ける ID */
var stopButtonId = "stop-button";
var sounds = document.getElementsByClassName(soundButtonClassName);
for (var i = 0, l = sounds.length; l > i; i++) {
sounds[i].onclick = function () {
var file = this.getAttribute("data-file");
// 一度生成したエレメントは生成しない
if (
typeof syncerSounds.flag[file] == "undefined" ||
syncerSounds.flag[file] != 1
) {
var audio = document.createElement("audio");
audio.id = file;
if (audio.canPlayType("audio/mp3")) {
audio.src = soundsBasePath + file + ".mp3";
}
document.body.appendChild(audio);
}
// 初回再生以外だったら音声ファイルを巻き戻す
stopCurrentSound();
document.getElementById(file).play();
syncerSounds.currentTime = file;
// 初回再生が終わった判定用に[syncerSounds.flag]の値を0から1に変更する
// エレメントを何度も生成しないようにするため
syncerSounds.flag[file] = 1;
return false;
};
}
/**
* 前回の音声を停止する
*/
function stopCurrentSound() {
var currentSound = document.getElementById(syncerSounds.currentTime);
if (currentSound != null) {
currentSound.pause();
currentSound.currentTime = 0;
}
}
/**
* 停止ボタンをクリックした時のイベントを登録する
* @returns {boolean}
*/
document.getElementById(stopButtonId).onclick = function () {
stopCurrentSound();
return false;
};
});