Browse Source

opto-transform : sort valueFns so translate always comes before scale. use object to hold data

pull/14/head
David DeSandro 14 years ago
parent
commit
22f0a1d07e
  1. 62
      src/jquery.opto-transform.js

62
src/jquery.opto-transform.js

@ -5,26 +5,33 @@
// if props.transform hasn't been set, do it already // if props.transform hasn't been set, do it already
$.props.transform = getStyleProperty('transform'); $.props.transform = getStyleProperty('transform');
var transformFnUtilsDimensional = { var optoTransform = {
'2d' : { fnUtilsDimensional : {
translate : function ( position ) { '2d' : {
return 'translate(' + position[0] + 'px, ' + position[1] + 'px)'; translate : function ( position ) {
}, return 'translate(' + position[0] + 'px, ' + position[1] + 'px) ';
scale : function ( scale ) {
return 'scale(' + scale[0] + ')';
}
}, },
'3d' : { scale : function ( scale ) {
translate : function ( position ) { return 'scale(' + scale[0] + ') ';
return 'translate3d(' + position[0] + 'px, ' + position[1] + 'px, 0)';
},
scale : function ( scale ) {
return 'scale3d(' + scale[0] + ', ' + scale[0] + ', 1)';
}
} }
}, },
dimensions = Modernizr.csstransforms3d ? '3d' : '2d', '3d' : {
transformFnUtils = transformFnUtilsDimensional[ dimensions ]; translate : function ( position ) {
return 'translate3d(' + position[0] + 'px, ' + position[1] + 'px, 0) ';
},
scale : function ( scale ) {
return 'scale3d(' + scale[0] + ', ' + scale[0] + ', 1) ';
}
}
},
dimensions : Modernizr.csstransforms3d ? '3d' : '2d',
// always do translate then scale
transforms : [ 'translate', 'scale' ]
};
optoTransform.fnUtils = optoTransform.fnUtilsDimensional[ optoTransform.dimensions ];
optoTransform.transformsLen = 2;
var _jQueryStyle = $.style; var _jQueryStyle = $.style;
@ -34,25 +41,30 @@
case 'scale' : case 'scale' :
case 'translate' : case 'translate' :
// unpack current transform data // unpack current transform data
var data = $( elem ).data('transform') || {}, var data = $( elem ).data('opto-transform') || {},
// extend new value over current data // extend new value over current data
newData = {}, newData = {},
valueFns = [], fnName,
fnName; transformObj = {};
newData[ name ] = value; newData[ name ] = value;
$.extend( data, newData ); $.extend( data, newData );
for ( fnName in data ) { for ( fnName in data ) {
var transformValue = data[ fnName ], var transformValue = data[ fnName ],
getFn = transformFnUtils[ fnName ], getFn = optoTransform.fnUtils[ fnName ];
valueFn = getFn( transformValue ); transformObj[ fnName ] = getFn( transformValue );
valueFns.push( valueFn );
} }
// get proper order
var translateFn = transformObj.translate || '',
scaleFn = transformObj.scale || '',
valueFns = translateFn + scaleFn;
// set data back in elem // set data back in elem
$( elem ).data('transform', data ); $( elem ).data('opto-transform', data );
value = valueFns.join(' '); // sorting so scale always comes before
value = valueFns;
// set name to vendor specific property // set name to vendor specific property
name = $.props.transform; name = $.props.transform;

Loading…
Cancel
Save