diff options
| author | Jules Laplace <jules@okfoc.us> | 2016-11-28 18:12:34 -0500 |
|---|---|---|
| committer | Jules Laplace <jules@okfoc.us> | 2016-11-28 18:12:34 -0500 |
| commit | ec41dd9dcc8e9af0d108297c6cfcfcef43d0d105 (patch) | |
| tree | ec9569f69a6420e965661b3c03c252b4212c99f2 /new-reality/public/assets/js/vendor/loader.js | |
| parent | 2860b0ceae8e08704996b3397fb8b962ca60ab95 (diff) | |
new reality co
Diffstat (limited to 'new-reality/public/assets/js/vendor/loader.js')
| -rwxr-xr-x | new-reality/public/assets/js/vendor/loader.js | 99 |
1 files changed, 99 insertions, 0 deletions
diff --git a/new-reality/public/assets/js/vendor/loader.js b/new-reality/public/assets/js/vendor/loader.js new file mode 100755 index 0000000..4b4fde4 --- /dev/null +++ b/new-reality/public/assets/js/vendor/loader.js @@ -0,0 +1,99 @@ +var Loader = Loader || (function(){ + function Loader (readyCallback, view){ + this.assets = {}; + this.images = []; + this.readyCallback = readyCallback || function(){}; + this.count = 0 + this.view = view + this.loaded = false + } + + // Register an asset as loading + Loader.prototype.register = function(s){ + this.assets[s] = false; + this.count += 1 + } + + // Signal that an asset has loaded + Loader.prototype.ready = function(s){ + window.debug && console.log("ready >> " + s); + + this.assets[s] = true; + if (this.loaded) return; + + this.view && this.view.update( this.percentRemaining() ) + + if (! this.isReady()) return; + + this.loaded = true; + if (this.view) { + this.view && this.view.finish(this.readyCallback) + } + else { + this.readyCallback && this.readyCallback(); + } + } + + // (boolean) Is the loader ready? + Loader.prototype.isReady = function(){ + for (var s in this.assets) { + if (this.assets.hasOwnProperty(s) && this.assets[s] != true) { + return false; + } + } + return true; + } + + // (float) Percentage of assets remaining + Loader.prototype.percentRemaining = function(){ + return this.remainingAssets() / this.count + } + + // (int) Number of assets remaining + Loader.prototype.remainingAssets = function(){ + var n = 0; + for (var s in this.assets) { + if (this.assets.hasOwnProperty(s) && this.assets[s] != true) { + n++; + // console.log('remaining: ' + s); + } + } + return n; + } + + // Preload the images in config.images + Loader.prototype.preloadImages = function(images){ + this.register("preload"); + for (var i = 0; i < images.length; i++) { + this.preloadImage(images[i]); + } + this.ready("preload"); + } + Loader.prototype.preloadImage = function(src, register, cb){ + if (! src || src == "none") return; + var _this = this; + if (! cb && typeof register === "function") { + cb = register + register = null + } + if (register) { + this.register(src); + } + var img = new Image(), loaded = false; + img.onload = function(){ + if (loaded) return + loaded = true + if (cb) { + cb(img); + } + if (register) { + _this.ready(src); + } + } + img.src = src; + if (img.complete) img.onload(); + _this.images.push(img); + } + + return Loader; +})(); |
