/** * Image Loader * Reliably pre-loads images */ // var ImageLoader = function(src,element,cb){{{ var ImageLoader = function(src,element,cb){ this.src = src; if (!element) element = new Image; this.element = element; this.callback = cb; this.load(); }; // }}} $.extend(ImageLoader,{ // attach: function(el,cb){{{ attach: function(el,cb){ return new ImageLoader(el.src,el,cb); }, // }}} // prototype: {{{ prototype: { getDimensions: function(){ var el = this.element; if (el.naturalWidth) return [ el.naturalWidth, el. naturalHeight ]; if (el.width) return [ el.width, el.height ]; return null; }, fireCallback: function(){ this.element.onload = null; if (typeof this.callback == 'function') this.callback.apply(this,this.getDimensions()); }, isLoaded: function(){ return this.element.complete; }, load: function(){ var t = this; var el = t.element; el.src = t.src; if (t.isLoaded()) t.fireCallback(); else t.element.onload = function(e){ t.fireCallback(); }; } } // }}} }); Jcrop.registerComponent('ImageLoader',ImageLoader);