Che*_*ong 5 javascript audio caching
我有一个简短的音频文件集合,我想在用户按下相应按钮时播放一个音频文件。我有以下脚本可以播放声音:
<script type="text/javascript">
var sound = new Audio();
function playSound(audioUrl) {
sound.src = audioUrl;
sound.play();
}
</script>
<button type="button" onclick="playSound('http://example.com/audioA.mp3')">Audio A</button>
<button type="button" onclick="playSound('http://example.com/audioB.mp3')">Audio B</button>
<button type="button" onclick="playSound('http://example.com/audioC.mp3')">Audio C</button>
...
Run Code Online (Sandbox Code Playgroud)
问题是,这些音频文件不大,但是在第一次按下按钮时仍需要短暂的延迟才能下载和播放,这有点烦人。如何命令浏览器在页面加载时缓存所有音频文件?当我搜索此内容时,我发现有关缓冲和流音频的内容可能不适合我的需求,因为我的音频长度不那么长。谢谢。
您可以预加载它们,然后在预加载完成后立即使链接可用。您可以同步或异步执行此操作。我建议异步进行。
看这个例子:
var sound = new Audio();
function playSound(audioUrl) {
sound.src = audioUrl.getAttribute('data-url'); //grab the data-url
sound.play();
}
function preloadAudio()
{
var audioButtons = document.querySelectorAll("button[data-type='audio']") //select all button elements with data-type = audio
for (var i = 0; i < audioButtons.length; i++)
{
//loop all audio elements
audioButtons[i].setAttribute("disabled", true); //disable the element
var preloader = new Audio();
preloader.addEventListener("loadeddata", enableAudioButton.bind(audioButtons[i]), true); // use bind to link the audio button to the function
preloader.src = audioButtons[i].getAttribute("data-url"); //trigger the download
}
}
function enableAudioButton()
{
this.removeAttribute("disabled"); //reenable the button
}
document.body.addEventListener("load", preloadAudio, true);Run Code Online (Sandbox Code Playgroud)
<button type="button" data-type="audio" data-url="http://example.com/audioA.mp3" onclick="playSound(this)">Audio A</button>
<button type="button" data-type="audio" data-url="http://example.com/audioB.mp3" onclick="playSound(this)">Audio B</button>
<button type="button" data-type="audio" data-url="http://www.stephaniequinn.com/Music/Allegro%20from%20Duet%20in%20C%20Major.mp3" onclick="playSound(this)">Audio C</button>Run Code Online (Sandbox Code Playgroud)
我使用了一个真实的示例(音频 C),因此您可以在函数中看到该脚本。
| 归档时间: |
|
| 查看次数: |
2683 次 |
| 最近记录: |