Файл: includes/jquery/jquery.preload.js
Строк: 200
<?php
/**
* jQuery.Preload
* Copyright (c) 2008 Ariel Flesler - aflesler(at)gmail(dot)com
* Dual licensed under MIT and GPL.
* Date: 3/12/2008
*
* @projectDescription Multifunctional preloader
* @author Ariel Flesler
* @version 1.0.7
*
* @id jQuery.preload
* @param {String, jQuery, Array< String, <a>, <link>, <img> >} original Collection of sources to preload
* @param {Object} settings Hash of settings.
*
* @id jQuery.fn.preload
* @param {Object} settings Hash of settings.
* @return {jQuery} Returns the same jQuery object, for chaining.
*
* @example Link Mode:
* $.preload( '#images a' );
*
* @example Rollover Mode:
* $.preload( '#images img', {
* find:/.(gif|jpg)/,
* replace:'_over.$1'
* });
*
* @example Src Mode:
* $.preload( [ 'red', 'blue', 'yellow' ], {
* base:'images/colors/',
* ext:'.jpg'
* });
*
* @example Placeholder Mode:
* $.preload( '#images img', {
* placeholder:'placeholder.jpg',
* notFound:'notfound.jpg'
* });
*
* @example Placeholder+Rollover Mode(High res):
* $.preload( '#images img', {
* placeholder:true,
* find:/.(gif|jpg)/,
* replace:'_high.$1'
* });
*/
;(function( $ ){
var $preload = $.preload = function( original, settings ){
if( original.split )//selector
original = $(original);
settings = $.extend( {}, $preload.defaults, settings );
var sources = $.map( original, function( source ){
if( !source )
return;//skip
if( source.split )//URL Mode
return settings.base + source + settings.ext;
var url = source.src || source.href;//save the original source
if( typeof settings.placeholder == 'string' && source.src )//Placeholder Mode, if it's an image, set it.
source.src = settings.placeholder;
if( url && settings.find )//Rollover mode
url = url.replace( settings.find, settings.replace );
return url || null;//skip if empty string
});
var data = {
loaded:0,//how many were loaded successfully
failed:0,//how many urls failed
next:0,//which one's the next image to load (index)
done:0,//how many urls were tried
//found:false,//whether the last one was successful
total:sources.length//how many images are being preloaded overall
};
if( !data.total )//nothing to preload
return finish();
var imgs = '<img/>',//ensure one
thres = settings.threshold;//save a copy
while( --thres > 0 )//it could be oddly negative
imgs += '<img/>';
imgs = $(imgs).load(handler).error(handler).bind('abort',handler).each(fetch);
function handler( e ){
data.found = e.type == 'load';
data.image = this.src;
var orig = data.original = original[this.index];
data[data.found?'loaded':'failed']++;
data.done++;
if( settings.placeholder && orig.src )//special case when on placeholder mode
orig.src = data.found ? data.image : settings.notFound || orig.src;
if( settings.onComplete )
settings.onComplete( data );
if( data.done < data.total )//let's continue
fetch( 0, this );
else{//we are finished
if( imgs.unbind )//sometimes IE gets here before finishing line 84
imgs.unbind('load').unbind('error').unbind('abort');//cleanup
imgs = null;
finish();
}
};
function fetch( i, img, retry ){
if( $.browser.msie && data.next && data.next % $preload.gap == 0 && !retry ){//IE problem, can't preload more than 15
setTimeout(function(){ fetch( i, img, true ); }, 0);
return false;
}
if( data.next == data.total ) return false;//no more to fetch
img.index = data.next;//save it, we'll need it.
img.src = sources[data.next++];
if( settings.onRequest ){
data.image = img.src;
data.original = original[data.next-1];
settings.onRequest( data );
}
};
function finish(){
if( settings.onFinish )
settings.onFinish( data );
};
};
// each time we load this amount and it's IE, we must rest for a while, make it lower if you get stack overflow.
$preload.gap = 14;
$preload.defaults = {
threshold:2,//how many images to load simultaneously
base:'',//URL mode: a base url can be specified, it is prepended to all string urls
ext:'',//URL mode:same as base, but it's appended after the original url.
replace:''//Rollover mode: replacement (can be left empty)
/*
find:null,//Rollover mode: a string or regex for the replacement
notFound:''//Placeholder Mode: Optional url of an image to use when the original wasn't found
placeholder:'',//Placeholder Mode: url of an image to set while loading
onRequest:function( data ){ ... },//callback called every time a new url is requested
onComplete:function( data ){ ... },//callback called every time a response is received(successful or not)
onFinish:function( data ){ ... }//callback called after all the images were loaded(or failed)
*/
};
$.fn.preload = function( settings ){
$preload( this, settings );
return this;
};
})( jQuery );
?>