Javascript 如何使用jQuery创建有效的预加载程序,它可以将mp3文件预加载到浏览器缓存中?

Javascript 如何使用jQuery创建有效的预加载程序,它可以将mp3文件预加载到浏览器缓存中?,javascript,jquery,html,preloader,Javascript,Jquery,Html,Preloader,我在一个网站上有一个简单的绘图谱,它加载到浏览器缓存一首歌曲,并在歌曲完全下载后播放 我已经为我的网站做了一个预加载程序,当歌曲被加载时,它会显示一条消息和一个图像7秒钟。不幸的是,它不能以我希望的方式工作,因为7秒可能不足以加载一首歌曲(例如,一首11兆字节的测试歌曲) 如何重建站点以预加载所有数据?我当前的脚本如下: <!DOCTYPE html> <html> <head> <meta charset="UTF-8">

我在一个网站上有一个简单的绘图谱,它加载到浏览器缓存一首歌曲,并在歌曲完全下载后播放

我已经为我的网站做了一个预加载程序,当歌曲被加载时,它会显示一条消息和一个图像7秒钟。不幸的是,它不能以我希望的方式工作,因为7秒可能不足以加载一首歌曲(例如,一首11兆字节的测试歌曲)

如何重建站点以预加载所有数据?我当前的脚本如下:

<!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: '&nbsp;',
                            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);
 }