jquery-ui/ui/effect-blind.js

91 lines
2.1 KiB
JavaScript
Raw Permalink Normal View History

/*!
* jQuery UI Effects Blind @VERSION
2012-07-04 13:08:08 +00:00
* http://jqueryui.com
*
* Copyright jQuery Foundation and other contributors
2012-08-09 14:13:24 +00:00
* Released under the MIT license.
* http://jquery.org/license
*
2012-09-26 23:06:20 +00:00
* http://api.jqueryui.com/blind-effect/
*/
(function( factory ) {
if ( typeof define === "function" && define.amd ) {
2011-06-21 06:15:42 +00:00
// AMD. Register as an anonymous module.
define([
"jquery",
"./effect"
], factory );
} else {
// Browser globals
factory( jQuery );
}
}(function( $ ) {
return $.effects.effect.blind = function( o, done ) {
// Create element
var el = $( this ),
rvertical = /up|down|vertical/,
rpositivemotion = /up|left|vertical|horizontal/,
props = [ "position", "top", "bottom", "left", "right", "height", "width" ],
mode = $.effects.setMode( el, o.mode || "hide" ),
direction = o.direction || "up",
vertical = rvertical.test( direction ),
ref = vertical ? "height" : "width",
ref2 = vertical ? "top" : "left",
motion = rpositivemotion.test( direction ),
animation = {},
show = mode === "show",
wrapper, distance, margin;
2011-03-07 00:48:14 +00:00
// if already wrapped, the wrapper's properties are my property. #6245
if ( el.parent().is( ".ui-effects-wrapper" ) ) {
$.effects.save( el.parent(), props );
} else {
$.effects.save( el, props );
}
2011-06-21 06:15:42 +00:00
el.show();
wrapper = $.effects.createWrapper( el ).css({
overflow: "hidden"
});
distance = wrapper[ ref ]();
margin = parseFloat( wrapper.css( ref2 ) ) || 0;
2011-03-07 00:48:14 +00:00
2011-06-21 06:15:42 +00:00
animation[ ref ] = show ? distance : 0;
if ( !motion ) {
el
.css( vertical ? "bottom" : "right", 0 )
.css( vertical ? "top" : "left", "auto" )
.css({ position: "absolute" });
animation[ ref2 ] = show ? margin : distance + margin;
}
// start at 0 if we are showing
2011-06-21 06:15:42 +00:00
if ( show ) {
wrapper.css( ref, 0 );
2013-10-16 18:43:09 +00:00
if ( !motion ) {
wrapper.css( ref2, margin + distance );
}
}
// Animate
wrapper.animate( animation, {
duration: o.duration,
easing: o.easing,
queue: false,
complete: function() {
2011-06-21 06:15:42 +00:00
if ( mode === "hide" ) {
el.hide();
}
2011-06-21 06:15:42 +00:00
$.effects.restore( el, props );
$.effects.removeWrapper( el );
done();
}
});
};
}));