Examplehtml
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); }
从上面这个代码能大概的看出来,预加载大概分为3步node
明确加载资源的路径以及命名json
若是有须要能够绑定加载各个过程的事件监听程序跨域
preloadjs最主要的类就是LoadQueue,接下来介绍一下LoadQueue常见的方法和使用方式,LoadQueue是加载管理器,能够用来预加载单个文件或者是文件队列数组
var queue = new createjs.LoadQueue(true);
LoadQueue的构造函数参数( [preferXHR=true] [basePath=""] [crossOrigin=""] )
Parameters:浏览器
"http://www.xx.com"
这种完整的url,或者是使用相对路径中的../
将不会增长参数5个事件监听程序就是上面提到的,使用方法以下:服务器
queue.on('fileload', handleFileLoad, this); queue.on('complete', handleFileLoad, this);
添加单个文件经过loadFile, 或者一次性添加多个文件使用数组或者清单列表经过调用loadManifest,文件将会被添加到活动队列,因此什么时候何地均可以使用这些方法,由于加载资源共用同一个队列,新建下载任务无非都加入了队尾!app
queue.loadFile('filePath/file.jpg'); // 添加单个文件使用loadFile方法,参数是相对路径 queue.loadFile({ id: 'image', src: 'filePath/file.jpg' // 这种添加的方法主要是想给这副图片绑定id,方便加载后使用 }) queue.loadManifest([ // 这种添加方法,添加的就是资源数组,这个数组里,无非是带id不带id的申明区别 "filePath/file.jpg", {id: 'image', src: 'filePath/file.jpg'} ]) // 使用json做为外部资源,这个json的格式可能就是咱们的资源数组的格式 queue.loadManifest('path/to/manifest.json'); queue.loadManifest({ src: 'manifest.json', type: 'manifest' //这里要特殊说明一下文件类型 ])
清单项的文件类型由文件扩展名自动肯定。 PreloadJS 中的模式匹配应该处理大多数标准文件和 URL 格式,并使用常见的文件扩展名。 若是您具备非标准文件扩展名,或者使用代理脚本提供文件,则能够使用任何清单项传递 type 属性。
这个也就是上面使用json做为外部资源时,为何要声明type的缘由!dom
queue.LoadFile({ src: 'filePath/myFile.mp3x', type: createjs.Types.SOUND ]) queue.LoadFile({ src: 'https://www.xiaomi.com?file=image.jpg', type: createjs.Types.IMAGE })
这两种“不合常理”的写法分别解释一下,第一种采用了mp3x文件拓展名,不是常规的拓展名,因此createjs不能自动识别,须要手动规定其解析类型;第二种,采用的是url,可是createjs不会尝试从查询字符串,也就是?file=image.jgp
,中进行查询,因此也是须要调用createjs.Types.IMAGE
进行解析.
支持的类型定义:ide
前面那几个步骤目的在于初始化下载队列,添加下载文件,包括添加下载各个过程的事件。那么咱们文件下载好了以后呢?文件下载的目的确定是使用啊,那怎么办呢?让咱们由浅入深往下看!、
文件下载完毕后,fileload事件会触发。加载的文件一般是一个格式化的对象,并且能够当即使用,看一下常见的文件格式加载后转换为能够供咱们调用的文件格式:
A <link /> tag
An <img /> tag
A <script /> tag
An <audio /> tag
<object /> tag
来看一个官网的例子:
function handleFileLoad(event) { var queue = new createjs.LoadQueue(true); queue.on("fileload", handleFileLoad, this); queue.loadFile("filePath/file.jpg"); var item = event.item; // 这个item就是 一个img对象,注意啊,这里咱们绑定的是fileload事件,由于fileload事件定义就是一个文件加载就触发 var type = item.type; // Add any images to the page body. if (type == createjs.Types.IMAGE) { document.body.appendChild(event.result); } }
注意,与资源下载有关的那些事件的事件对象的属性不尽相同,fileload拥有所有的事件对象属性,差别能够看一下官网:https://createjs.com/docs/pre...
这里fileload的事件对象属性以下:
每当文件加载完毕,咱们能够经过使用getResult(id);来访问咱们的文件,若是没有提供id值,那么能够输入src或者文件的路径,依然能够访问。若是要查找内容,建议始终传递ID。不要给本身找麻烦。
var image = queue.getResult("image"); // image已是img对象了 document.body.appendChild(image);
想要访问文件的二进制数据怎么办?一种是使用fileload事件的事件对象的rawResult属性,或者是直接在getResult方法第二个参数加一个true。 这仅适用于已为浏览器解析的内容,特别是:JavaScript,CSS,XML,SVG 和 JSON 对象,或任何使用 XHR 加载的内容
var image = queue.getResult("image", true); // load the binary image data loaded with XHR.