aboutsummaryrefslogtreecommitdiffstats
path: root/ui/jquery.effects.pulsate.js
diff options
context:
space:
mode:
Diffstat (limited to 'ui/jquery.effects.pulsate.js')
-rw-r--r--ui/jquery.effects.pulsate.js51
1 files changed, 31 insertions, 20 deletions
diff --git a/ui/jquery.effects.pulsate.js b/ui/jquery.effects.pulsate.js
index b168b6ef5..3325c251f 100644
--- a/ui/jquery.effects.pulsate.js
+++ b/ui/jquery.effects.pulsate.js
@@ -13,39 +13,50 @@
(function( $, undefined ) {
$.effects.effect.pulsate = function( o ) {
- return this.queue( function() {
+ return this.queue( function( next ) {
var elem = $( this ),
- mode = $.effects.setMode( elem, o.mode || 'show' ),
- times = ( ( o.times || 5 ) * 2 ) - 1,
- duration = o.duration / 2,
- isVisible = elem.is( ':visible' ),
+ mode = $.effects.setMode( elem, o.mode || "effect" ),
+ show = mode === "show" || elem.is( ":hidden" ),
+ showhide = ( show || mode === "hide" ),
+
+ // showing or hiding adds an extra "half" animation
+ anims = ( ( o.times || 5 ) * 2 ) + ( showhide ? 1 : 0 ),
+ duration = o.duration / anims,
animateTo = 0,
+ queue = elem.queue(),
+ queuelen = queue.length,
i;
- if ( !isVisible ) {
- elem.css('opacity', 0).show();
+ if ( show ) {
+ elem.css( "opacity", 0 ).show();
animateTo = 1;
}
- if ( ( mode == 'hide' && isVisible ) || ( mode == 'show' && !isVisible ) ) {
- times--;
- }
-
- for ( i = 0; i < times; i++ ) {
- elem.animate({
- opacity: animateTo
+ // anims - 1 opacity "toggles"
+ for ( i = 1; i < anims; i++ ) {
+ elem.animate({
+ opacity: animateTo
}, duration, o.easing );
- animateTo = ( animateTo + 1 ) % 2;
+ animateTo = 1 - animateTo;
}
- elem.animate({
- opacity: animateTo
+ elem.animate({
+ opacity: animateTo
}, duration, o.easing, function() {
- if (animateTo == 0) {
+ if ( animateTo === 0 ) {
elem.hide();
}
- (o.complete && o.complete.apply(this, arguments));
- }).dequeue();
+ if ( o.complete ) {
+ o.complete.apply( this );
+ }
+ });
+
+ // We just queued up "anims" animations, we need to put them next in the queue
+ if ( queuelen > 1) {
+ queue.splice.apply( queue,
+ [ 1, 0 ].concat( queue.splice( queuelen, anims ) ) );
+ }
+ next();
});
};