WebisteDLH/wwwroot/vendor/afterresize/afterresize.js

100 lines
2.0 KiB
JavaScript

( function( $ ) {
"use strict";
// Define default settings
var defaults = {
action: function() {},
runOnLoad: false,
duration: 500
};
// Define global variables
var settings = defaults,
running = false,
start;
var methods = {};
// Initial plugin configuration
methods.init = function() {
// Allocate passed arguments to settings based on type
for( var i = 0; i <= arguments.length; i++ ) {
var arg = arguments[i];
switch ( typeof arg ) {
case "function":
settings.action = arg;
break;
case "boolean":
settings.runOnLoad = arg;
break;
case "number":
settings.duration = arg;
break;
}
}
// Process each matching jQuery object
return this.each(function() {
if( settings.runOnLoad ) { settings.action(); }
$(this).resize( function() {
methods.timedAction.call( this );
} );
} );
};
methods.timedAction = function( code, millisec ) {
var doAction = function() {
var remaining = settings.duration;
if( running ) {
var elapse = new Date() - start;
remaining = settings.duration - elapse;
if( remaining <= 0 ) {
// Clear timeout and reset running variable
clearTimeout(running);
running = false;
// Perform user defined function
settings.action();
return;
}
}
wait( remaining );
};
var wait = function( time ) {
running = setTimeout( doAction, time );
};
// Define new action starting time
start = new Date();
// Define runtime settings if function is run directly
if( typeof millisec === 'number' ) { settings.duration = millisec; }
if( typeof code === 'function' ) { settings.action = code; }
// Only run timed loop if not already running
if( !running ) { doAction(); }
};
$.fn.afterResize = function( method ) {
if( methods[method] ) {
return methods[method].apply( this, Array.prototype.slice.call( arguments, 1 ) );
} else {
return methods.init.apply( this, arguments );
}
};
})(jQuery);