Repository navigation
Expand file tree
/
Copy pathsound.js
More file actions
104 lines (93 loc) · 2.72 KB
/
Copy pathsound.js
File metadata and controls
104 lines (93 loc) · 2.72 KB
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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
// ============================================
// 音效播放工具
// ============================================
(function () {
'use strict';
var _enabled = true;
var _volume = 0.5;
var _cache = {};
// 音效文件映射
var SOUND_NAMES = ['back', 'click', 'close', 'collapse', 'drag', 'error', 'lightclick', 'save', 'select', 'submit', 'update'];
// 预加载音效
function preload() {
for (var i = 0; i < SOUND_NAMES.length; i++) {
var name = SOUND_NAMES[i];
try {
var audio = new Audio('sound/' + name + '.ogg');
audio.preload = 'auto';
_cache[name] = audio;
} catch (e) {
// 静默失败
}
}
}
// 加载设置
function loadSettings() {
try {
var stored = localStorage.getItem('editorConfig');
if (stored) {
var config = JSON.parse(stored);
if (config.sound !== undefined) _enabled = !!config.sound;
if (config.soundVolume !== undefined) _volume = parseFloat(config.soundVolume) || 0.5;
}
} catch (e) {}
}
// 播放音效
function playSound(name) {
if (!_enabled) return;
if (!name) return;
name = name.toLowerCase();
if (SOUND_NAMES.indexOf(name) === -1) return;
var audio;
if (_cache[name]) {
audio = _cache[name];
} else {
try {
audio = new Audio('sound/' + name + '.ogg');
_cache[name] = audio;
} catch (e) { return; }
}
try {
audio.volume = _volume;
audio.currentTime = 0;
audio.play().catch(function () {});
} catch (e) {}
}
// 设置启用状态
function setEnabled(enabled) {
_enabled = !!enabled;
try {
var stored = localStorage.getItem('editorConfig');
var config = stored ? JSON.parse(stored) : {};
config.sound = _enabled;
localStorage.setItem('editorConfig', JSON.stringify(config));
} catch (e) {}
}
// 设置音量
function setVolume(vol) {
_volume = Math.max(0, Math.min(1, parseFloat(vol) || 0.5));
try {
var stored = localStorage.getItem('editorConfig');
var config = stored ? JSON.parse(stored) : {};
config.soundVolume = _volume;
localStorage.setItem('editorConfig', JSON.stringify(config));
} catch (e) {}
}
// 获取状态
function isEnabled() { return _enabled; }
function getVolume() { return _volume; }
// 初始化
loadSettings();
// 暴露到全局
window.playSound = playSound;
window.soundSetEnabled = setEnabled;
window.soundSetVolume = setVolume;
window.soundIsEnabled = isEnabled;
window.soundGetVolume = getVolume;
// DOM 加载完毕后预加载
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', preload);
} else {
preload();
}
})();