Javascript 如何使用jQuery创建有效的预加载程序,它可以将mp3文件预加载到浏览器缓存中?
我在一个网站上有一个简单的绘图谱,它加载到浏览器缓存一首歌曲,并在歌曲完全下载后播放 我已经为我的网站做了一个预加载程序,当歌曲被加载时,它会显示一条消息和一个图像7秒钟。不幸的是,它不能以我希望的方式工作,因为7秒可能不足以加载一首歌曲(例如,一首11兆字节的测试歌曲) 如何重建站点以预加载所有数据?我当前的脚本如下:Javascript 如何使用jQuery创建有效的预加载程序,它可以将mp3文件预加载到浏览器缓存中?,javascript,jquery,html,preloader,Javascript,Jquery,Html,Preloader,我在一个网站上有一个简单的绘图谱,它加载到浏览器缓存一首歌曲,并在歌曲完全下载后播放 我已经为我的网站做了一个预加载程序,当歌曲被加载时,它会显示一条消息和一个图像7秒钟。不幸的是,它不能以我希望的方式工作,因为7秒可能不足以加载一首歌曲(例如,一首11兆字节的测试歌曲) 如何重建站点以预加载所有数据?我当前的脚本如下: <!DOCTYPE html> <html> <head> <meta charset="UTF-8">
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8"></meta>
<title>Shiny Toy Guns - Major Tom</title>
<script type="text/javascript" src="http://code.jquery.com/jquery-2.1.0.min.js"></script>
<script type="text/javascript">
(function($) {
$.fn.extend({
jqbar: function(options) {
var DefaultSpeedOfAnimation = 7000;
var settings = $.extend({
SpeedOfAnimation: DefaultSpeedOfAnimation,
LengthOfBar: 200,
barWidth: 10,
barColor: 'red',
label: ' ',
value: 100
}, options);
return this.each(function() {
var valueLabelHeight = 0;
var ContainerProgress = $(this);
ContainerProgress.addClass('jqbar horizontal').append('<div class="bar-label"></div><div class="bar-level-wrapper"><div class="bar-level"></div></div><div class="bar-percent"></div>');
var progressLabel = ContainerProgress.find('.bar-label').html(settings.label);
var progressBar = ContainerProgress.find('.bar-level').attr('data-value', settings.value);
var progressBarWrapper = ContainerProgress.find('.bar-level-wrapper');
progressBar.css({
height: settings.barWidth,
width: 0,
backgroundColor: settings.barColor
});
var valueLabel = ContainerProgress.find('.bar-percent');
valueLabel.html('0');
animateProgressBar(progressBar);
function animateProgressBar(progressBar) {
var level = parseInt(progressBar.attr('data-value'));
if (level > 100) {
level = 100;
alert('max value cannot exceed 100 percent');
}
var w = settings.LengthOfBar * level / 100;
progressBar.animate({
width: w
}, {
duration: DefaultSpeedOfAnimation,
step: function(currentWidth) {
var percent = parseInt(currentWidth / settings.LengthOfBar * 100);
if (isNaN(percent)) percent = 0;
ContainerProgress.find('.bar-percent').html(percent + '%');
}
});
}
});
}
});
})(jQuery);
</script>
<style>
body {
text-align: center;
background-color: black;
color: white;
}
footer {
float: center;
bottom: 0;
position: absolute;
color: #FFFFFF;
font: bold 1.2em/2.5 arial;
width: 99%;
}
.jqbar {
position: relative;
top: 100px;
}
.jqbar.horizontal div {
display: inline-block;
margin-left: 5px;
font-size: 11px;
font-weight: bold;
}
.jqbar.horizontal .bar-percent {
font-size: 11px;
font-weight: bold;
height: 20px;
margin-bottom: 5px;
}
#progressbar {
width: 400px;
height: 22px;
border: 1px solid #000;
background-color: #292929;
}
#progressbar div {
height: 100%;
color: #FFF;
text-align: center;
line-height: 22px;
width: 0;
background-color: #0099FF;
}
#preloader {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
color: #FFF;
z-index: 99;
height: 100%;
}
#status {
width: 200px;
height: 200px;
position: absolute;
left: 50%;
top: 50%;
background-color: #000;
background-repeat: no-repeat;
background-position: center;
margin: -100px 0 0 -100px;
}
</style>
</head>
<body onload="hide_preloader();">
<div id="preloader">
<div id="status">Wait for MP3 Load...
<br>
<br>
<br>
<img src="http://alldev.eu/html/images/Loader.gif" />
</div>
</div>
<footer>
<center>
<div id="bar-1"></div>
<canvas id="music" width="1024" height="250" style="display: block;"></canvas>
</center>
</footer>
<script type="text/javascript">
jQuery(window).load(function() {
jQuery("#status").delay(5000).fadeOut(2500);
jQuery("#preloader").delay(5000).fadeOut(2500);
jQuery("#bar-1").delay(5000).fadeOut(2500);
});
$(document).ready(function() {
$('#bar-1').jqbar({
SpeedOfAnimation: 7000,
label: 'Loading...',
value: 100,
barColor: '#FFF',
barWidth: 20
});
});
if (!window.AudioContext) {
if (!window.webkitAudioContext) {
alert('AudioContext not found!');
}
window.AudioContext = window.webkitAudioContext;
}
var context = new AudioContext();
var audioBuffer;
var sourceNode;
var analyser;
var javascriptNode;
var ctx = $("#music").get()[0].getContext("2d");
var gradient = ctx.createLinearGradient(0, 0, 0, 325);
gradient.addColorStop(1, '#FFFFFF');
gradient.addColorStop(0.75, '#00FFFF');
gradient.addColorStop(0.25, '#0000FF');
gradient.addColorStop(0, '#000000');
setupAudioNodes();
loadSound("http://alldev.eu/html/mp3/Shiny%20Toy%20Guns%20-%20Major%20Tom%20(Official%20Live).mp3");
function setupAudioNodes() {
javascriptNode = context.createScriptProcessor(2048, 1, 1);
javascriptNode.connect(context.destination);
analyser = context.createAnalyser();
analyser.smoothingTimeConstant = 0.75; //0.5;
analyser.fftSize = 512;
sourceNode = context.createBufferSource();
sourceNode.connect(analyser);
analyser.connect(javascriptNode);
sourceNode.connect(context.destination);
}
$(document).ready(function() {
$.ajax({
url: "soundfile.mp3",
success: function() {
$("#play_button").show();
}
});
});
function loadSound(url) {
var request = new XMLHttpRequest();
request.open('GET', url, true);
request.responseType = 'arraybuffer';
request.onload = function() {
context.decodeAudioData(request.response, function(buffer) {
playSound(buffer);
}, onError);
}
request.send();
}
function playSound(buffer) {
sourceNode.buffer = buffer;
sourceNode.start(0);
}
function onError(e) {
console.log(e);
}
javascriptNode.onaudioprocess = function() {
var array = new Uint8Array(analyser.frequencyBinCount);
analyser.getByteFrequencyData(array);
ctx.clearRect(0, 0, 1024, 325);
ctx.fillStyle = gradient;
drawSpectrum(array);
}
function drawSpectrum(array) {
for (var i = 0; i < (array.length); i++) {
var value = array[i];
ctx.fillRect(i * 5, 325 - value, 3, 325);
}
};
</script>
</body>
</html>
闪亮的玩具枪-汤姆少校
(函数($){
$.fn.extend({
jqbar:功能(选项){
var DefaultSpeedOfAnimation=7000;
变量设置=$.extend({
SpeedOfAnimation:DefaultSpeedOfAnimation,
长度:200,
条宽:10,
barColor:'红色',
标签:“”,
数值:100
},选项);
返回此值。每个(函数(){
var valueLabelHeight=0;
var ContainerProgress=$(此项);
ContainerProgress.addClass('jqbar horizontal').append('');
var progressLabel=ContainerProgress.find('.bar label').html(settings.label);
var progressBar=ContainerProgress.find('.bar level').attr('data-value',settings.value);
var progressBarWrapper=ContainerProgress.find('.bar-level-wrapper');
progressBar.css({
高度:settings.barWidth,
宽度:0,
背景颜色:settings.barColor
});
var valueLabel=ContainerProgress.find('.bar percent');
html('0');
动画进度条(progressBar);
函数animateProgressBar(progressBar){
var-level=parseInt(progressBar.attr('data-value'));
如果(级别>100){
级别=100;
警报(“最大值不能超过100%);
}
var w=设置值。LengthOfBar*级别/100;
制作动画({
宽度:w
}, {
持续时间:DefaultSpeedOfAnimation,
步骤:函数(currentWidth){
var percent=parseInt(currentWidth/settings.LengthOfBar*100);
如果(isNaN(百分比))百分比=0;
ContainerProgress.find('.bar percent').html(percent+'%');
}
});
}
});
}
});
})(jQuery);
身体{
文本对齐:居中;
背景色:黑色;
颜色:白色;
}
页脚{
浮动:中心;
底部:0;
位置:绝对位置;
颜色:#FFFFFF;
字体:粗体1.2em/2.5 arial;
宽度:99%;
}
.jqbar{
位置:相对位置;
顶部:100px;
}
.jqbar.horizontal div{
显示:内联块;
左边距:5px;
字体大小:11px;
字体大小:粗体;
}
.jqbar.水平.棒材百分比{
字体大小:11px;
字体大小:粗体;
高度:20px;
边缘底部:5px;
}
#进度条{
宽度:400px;
高度:22px;
边框:1px实心#000;
背景色:#292929;
}
#进步酒吧部{
身高:100%;
颜色:#FFF;
文本对齐:居中;
线高:22px;
宽度:0;
背景色:#0099FF;
}
#预紧器{
位置:绝对位置;
排名:0;
左:0;
右:0;
底部:0;
颜色:#FFF;
z指数:99;
身高:100%;
}
#地位{
宽度:200px;
高度:200px;
位置:绝对位置;
左:50%;
最高:50%;
背景色:#000;
背景重复:无重复;
背景位置:中心;
裕度:-100px 0-100px;
}
等待MP3加载。。。
jQuery(window).load(函数(){
jQuery(“状态”)。延迟(5000)。淡出(2500);
jQuery(“预加载”)。延迟(5000)。淡出(2500);
jQuery(“#bar-1”)。延迟(5000)。淡出(2500);
});
$(文档).ready(函数(){
$('#bar-1').jqbar({
移动速度:7000,
标签:“装载”
var queue = new createjs.LoadQueue();
queue.installPlugin(createjs.Sound);
queue.on("complete", handleComplete, this);
queue.loadFile({id:"sound", src:"http://path/to/sound.mp3"});
queue.loadManifest([
{id: "myImage", src:"path/to/myImage.jpg"}
]);
function handleComplete() {
createjs.Sound.play("sound");
var image = queue.getResult("myImage");
document.body.appendChild(image);
}