Effects: set default easing using jQuery.easing._default

Fixes gh-2219
Close gh-2218
This commit is contained in:
Timmy Willison 2015-05-05 10:24:20 -07:00
parent d6933917d2
commit b7f9e62642
3 changed files with 42 additions and 18 deletions

5
src/effects.js vendored
View File

@ -286,7 +286,10 @@ function Animation( elem, properties, options ) {
animation = deferred.promise({ animation = deferred.promise({
elem: elem, elem: elem,
props: jQuery.extend( {}, properties ), props: jQuery.extend( {}, properties ),
opts: jQuery.extend( true, { specialEasing: {} }, options ), opts: jQuery.extend( true, {
specialEasing: {},
easing: jQuery.easing._default
}, options ),
originalProperties: properties, originalProperties: properties,
originalOptions: options, originalOptions: options,
startTime: fxNow || createFxNow(), startTime: fxNow || createFxNow(),

View File

@ -13,7 +13,7 @@ Tween.prototype = {
init: function( elem, options, prop, end, easing, unit ) { init: function( elem, options, prop, end, easing, unit ) {
this.elem = elem; this.elem = elem;
this.prop = prop; this.prop = prop;
this.easing = easing || "swing"; this.easing = easing || jQuery.easing._default;
this.options = options; this.options = options;
this.start = this.now = this.cur(); this.start = this.now = this.cur();
this.end = end; this.end = end;
@ -105,7 +105,8 @@ jQuery.easing = {
}, },
swing: function( p ) { swing: function( p ) {
return 0.5 - Math.cos( p * Math.PI ) / 2; return 0.5 - Math.cos( p * Math.PI ) / 2;
} },
_default: "swing"
}; };
jQuery.fx = Tween.prototype.init; jQuery.fx = Tween.prototype.init;

50
test/unit/effects.js vendored
View File

@ -1191,45 +1191,45 @@ test("animate with per-property easing", function(){
test("animate with CSS shorthand properties", function(){ test("animate with CSS shorthand properties", function(){
expect(11); expect(11);
var _default_count = 0, var easeAnimation_count = 0,
_special_count = 0, easeProperty_count = 0,
propsBasic = { "padding": "10 20 30" }, propsBasic = { "padding": "10 20 30" },
propsSpecial = { "padding": [ "1 2 3", "_special" ] }; propsSpecial = { "padding": [ "1 2 3", "propertyScope" ] };
jQuery.easing._default = function(p) { jQuery.easing.animationScope = function(p) {
if ( p >= 1 ) { if ( p >= 1 ) {
_default_count++; easeAnimation_count++;
} }
return p; return p;
}; };
jQuery.easing._special = function(p) { jQuery.easing.propertyScope = function(p) {
if ( p >= 1 ) { if ( p >= 1 ) {
_special_count++; easeProperty_count++;
} }
return p; return p;
}; };
jQuery("#foo") jQuery("#foo")
.animate( propsBasic, 200, "_default", function() { .animate( propsBasic, 200, "animationScope", function() {
equal( this.style.paddingTop, "10px", "padding-top was animated" ); equal( this.style.paddingTop, "10px", "padding-top was animated" );
equal( this.style.paddingLeft, "20px", "padding-left was animated" ); equal( this.style.paddingLeft, "20px", "padding-left was animated" );
equal( this.style.paddingRight, "20px", "padding-right was animated" ); equal( this.style.paddingRight, "20px", "padding-right was animated" );
equal( this.style.paddingBottom, "30px", "padding-bottom was animated" ); equal( this.style.paddingBottom, "30px", "padding-bottom was animated" );
equal( _default_count, 4, "per-animation default easing called for each property" ); equal( easeAnimation_count, 4, "per-animation default easing called for each property" );
_default_count = 0; easeAnimation_count = 0;
}) })
.animate( propsSpecial, 200, "_default", function() { .animate( propsSpecial, 200, "animationScope", function() {
equal( this.style.paddingTop, "1px", "padding-top was animated again" ); equal( this.style.paddingTop, "1px", "padding-top was animated again" );
equal( this.style.paddingLeft, "2px", "padding-left was animated again" ); equal( this.style.paddingLeft, "2px", "padding-left was animated again" );
equal( this.style.paddingRight, "2px", "padding-right was animated again" ); equal( this.style.paddingRight, "2px", "padding-right was animated again" );
equal( this.style.paddingBottom, "3px", "padding-bottom was animated again" ); equal( this.style.paddingBottom, "3px", "padding-bottom was animated again" );
equal( _default_count, 0, "per-animation default easing not called" ); equal( easeAnimation_count, 0, "per-animation default easing not called" );
equal( _special_count, 4, "special easing called for each property" ); equal( easeProperty_count, 4, "special easing called for each property" );
jQuery(this).css("padding", "0"); jQuery(this).css("padding", "0");
delete jQuery.easing._default; delete jQuery.easing.animationScope;
delete jQuery.easing._special; delete jQuery.easing.propertyScope;
}); });
this.clock.tick( 400 ); this.clock.tick( 400 );
}); });
@ -2227,5 +2227,25 @@ test( "Animation should go to its end state if document.hidden = true", 1, funct
} }
}); });
test( "jQuery.easing._default (#2218)", 2, function() {
jQuery( "#foo" )
.animate({ width: "5px" }, {
duration: 5,
start: function( anim ) {
equal( anim.opts.easing, jQuery.easing._default,
"anim.opts.easing should be equal to jQuery.easing._default when the easing argument is not given" );
}
})
.animate({ height: "5px" }, {
duration: 5,
easing: "linear",
start: function( anim ) {
equal( anim.opts.easing, "linear",
"anim.opts.easing should be equal to the easing argument" );
}
})
.stop();
this.clock.tick( 25 );
});
})(); })();