\r
X_NodeAnime_hasTransform = !!X_Node_CSS_VENDER_PREFIX[ 'transform' ],\r
\r
- X_NodeAnime_hasDXTransform = 5.5 <= X_UA[ 'IE' ] && X_UA[ 'IE' ] < 9 && X_UA[ 'ActiveX' ],\r
+ X_NodeAnime_hasDXTransform = 5.5 <= X_UA[ 'IE' ] && X_UA[ 'IE' ] < 9 && X_UA[ 'ActiveX' ], // IEHost が 11 の場合不可\r
\r
/* Opera mobile で translateZ(0) が有効だと XY が 0 0 になる */\r
/* GPUレイヤーにいる間に要素のコンテンツを変更をすると transitionend が動かなくなるっぽい Mac safari と firefox */\r
X_NodeAnime_translateZ = X_Node_CSS_VENDER_PREFIX[ 'perspective' ] && !X_UA[ 'OperaMobile' ] && !X_UA[ 'OperaTablet' ] ? ' translateZ(0)' : '',\r
\r
- X_NodeAnime_transitionProps = X_NodeAnime_hasTransform ? X_Node_CSS_VENDER_PREFIX[ 'transform' ] : 'left,top';\r
-\r
/*\r
* phase:\r
* 0: アニメーション無\r
* 5: GPU解除待ち\r
* 6: 開始可能\r
* 7: アニメーション中\r
- * TODO node.css( 'opacity' ) の上書き\r
*/\r
\r
-var X_NODE_ANIME_RESET = 1,\r
+ X_NODE_ANIME_RESET = 1,\r
X_NODE_ANIME_STAY_GPU = 2,\r
\r
X_NodeAnime_DEFAULT = {\r
- x : X_NodeAnime_hasTransform ? 0 : NaN,\r
- y : X_NodeAnime_hasTransform ? 0 : NaN,\r
- toX : X_NodeAnime_hasTransform ? 0 : NaN,\r
- toY : X_NodeAnime_hasTransform ? 0 : NaN,\r
- fromX : X_NodeAnime_hasTransform ? 0 : NaN,\r
- fromY : X_NodeAnime_hasTransform ? 0 : NaN,\r
+ x : NaN,\r
+ y : NaN,\r
+ toX : NaN,\r
+ toY : NaN,\r
+ fromX : NaN,\r
+ fromY : NaN,\r
rotate : NaN, fromRotate : NaN, toRotate : NaN,\r
skewX : NaN, fromSkewX : NaN, toSkewX : NaN,\r
skewY : NaN, fromSkewY : NaN, toSkewY : NaN,\r
scaleY : 1, fromScaleY : 1, toScaleY : 1,\r
alpha : NaN,\r
scrollX : NaN, fromScrollX : NaN, toScrollX : NaN,\r
- scrollY : NaN, fromScrollY : NaN, toScrollY : NaN,\r
- doScroll : false//,\r
+ scrollY : NaN, fromScrollY : NaN, toScrollY : NaN //,\r
+ //doScroll : false//,\r
//duration : 0\r
- //phase, lazyRelease, easing, follower, releaseNow, inited, progress doScroll, fallbackKind\r
+ //phase, lazyRelease, easing, follower, releaseNow, inited, progress, fallback\r
// fromTime, toTime\r
};\r
\r
a = this[ '_css' ] && parseFloat( this[ '_css' ].opacity );\r
if( 0 <= a ) obj.alpha = a;\r
};\r
- \r
- if( 0 <= duration && X_Type_isFinite( duration ) ){\r
- obj.duration = duration;\r
- };\r
-\r
- obj.easing = X_Type_isFunction( easing ) ? easing : X_NodeAnime_ease[ easing ] || X_NodeAnime_ease[ 'circular' ];\r
\r
// form :\r
obj.fromX = obj.x = X_NodeAnime_getFinite( from[ 'x' ], obj.x );\r
obj.toScrollX = X_NodeAnime_getFinite( dest[ 'scrollX' ], obj.scrollX );\r
obj.toScrollY = X_NodeAnime_getFinite( dest[ 'scrollY' ], obj.scrollY );\r
\r
- if( obj.toRotate && obj.rotate !== obj.rotate ) obj.rotate = 0;\r
- if( obj.toSkewX && obj.skewX !== obj.skewX ) obj.skewX = 0;\r
- if( obj.toSkewY && obj.skewY !== obj.skewY ) obj.skewY = 0;\r
+ if( X_Type_isFinite( obj.toX ) && X_Type_isNaN( obj.x ) ) obj.x = obj.fromX = 0;\r
+ if( X_Type_isFinite( obj.toY ) && X_Type_isNaN( obj.y ) ) obj.y = obj.fromY = 0;\r
+ \r
+ if( obj.toRotate && X_Type_isNaN( obj.rotate ) ) obj.rotate = obj.fromRotate = 0;\r
+ if( obj.toSkewX && X_Type_isNaN( obj.skewX ) ) obj.skewX = obj.fromSkewX = 0;\r
+ if( obj.toSkewY && X_Type_isNaN( obj.skewY ) ) obj.skewY = obj.fromSkewY = 0;\r
\r
+ obj.duration = 0 <= duration && X_Type_isFinite( duration ) ? duration : 0;\r
obj.lazyRelease = 0 <= lazyRelease && X_Type_isFinite( lazyRelease ) ? lazyRelease : 0;\r
- obj.inited = false;\r
- obj.doScroll = 0 <= obj.toScrollX || 0 <= obj.toScrollY;\r
- obj.transform = false;\r
- obj.fallback = 0;\r
- \r
- if( obj.fromX === obj.fromX || obj.fromY === obj.fromY ){\r
- obj.transform = !!X_NodeAnime_hasTransform;\r
- };\r
+ obj.easing = X_Type_isFunction( easing ) ? easing : X_NodeAnime_ease[ easing ] || X_NodeAnime_ease[ 'circular' ];\r
+ obj.inited = false;\r
+ obj.transform = ( X_Type_isFinite( obj.x ) || X_Type_isFinite( obj.y ) || obj.lazyRelease ) && X_NodeAnime_hasTransform;\r
+ obj.doScroll = 0 <= obj.toScrollX || 0 <= obj.toScrollY;\r
+ obj.fallback = 0;\r
+ obj.altX = fallback & 8 ? 'right' : 'left'; \r
+ obj.altY = fallback & 16 ? 'bottom' : 'top';\r
\r
// scale\r
- if( obj.toScaleX !== 1 && obj.fromScaleX !== 1 && obj.toScaleY !== 1 && obj.fromScaleY !== 1 ){\r
+ if( obj.toScaleX !== 1 || obj.fromScaleX !== 1 || obj.toScaleY !== 1 || obj.fromScaleY !== 1 ){\r
sameRate = obj.fromScaleX === obj.fromScaleY && obj.toScaleX === obj.toScaleY;\r
\r
if( X_NodeAnime_hasTransform ){\r
obj.transform = true;\r
} else\r
- if( X_NodeAnime_hasDXTransform && ( fallback & 16 ) ){ // DX Transform\r
- obj.fallback = 16;\r
+ if( X_NodeAnime_hasDXTransform && ( fallback & 32 ) ){ // DX Transform\r
+ obj.fallback = 32;\r
} else\r
if( ( fallback & 4 ) && sameRate ){ // zoom\r
obj.fallback = 4;\r
};\r
\r
// rotate, skew\r
- if( obj.toRotate === obj.toRotate || obj.toSkewX === obj.toSkewX || obj.toSkewY === obj.toSkewY ){\r
+ if( X_Type_isFinite( obj.rotate ) || X_Type_isFinite( obj.skewX ) || X_Type_isFinite( obj.skewY ) ){\r
if( X_NodeAnime_hasTransform ){\r
obj.transform = true;\r
} else\r
- if( X_NodeAnime_hasDXTransform && ( fallback & 16 ) ){ // DX Transform\r
- obj.fallback = 16;\r
+ if( X_NodeAnime_hasDXTransform && ( fallback & 32 ) ){ // DX Transform\r
+ obj.fallback = 32;\r
};\r
};\r
\r
*/\r
function X_NodeAnime_detectWaitAnimation( xnode, duration, isTest ){\r
var list = X_NodeAnime_QUEUE,\r
- i = 0, _xnode;\r
+ i = 0, _xnode, obj;\r
\r
for( ; _xnode = list[ i ]; ++i ){\r
if( _xnode === xnode ) break;\r
// -> いない、アニメーションが可能\r
for( i = 0; _xnode = list[ i ]; ++i ){\r
if( _xnode === xnode ) break;\r
-\r
- if( 6 <= _xnode[ '_anime' ].phase ){\r
+ obj = _xnode[ '_anime' ];\r
+ if( 6 <= obj.phase ){\r
if( xnode[ 'contains' ]( _xnode ) || _xnode[ 'contains' ]( xnode ) ){\r
return isTest ? 3 : _xnode;\r
};\r
scaleX = obj.scaleX = obj.toScaleX;\r
scaleY = obj.scaleY = obj.toScaleY;\r
alpha = obj.alpha = obj.toAlpha;\r
+ obj.scrollX = obj.toScrollX;\r
+ obj.scrollY = obj.toScrollY;\r
} else {\r
x = obj.x;\r
y = obj.y;\r
}; \r
}; \r
} else\r
- if( obj.fallback === 16 ){\r
- xnode[ 'css' ]( 'dxtransform', [ x || 0, y || 0, rotate || 0, skewX || 0, skewY || 0, scaleX, scaleY ] );\r
+ if( obj.fallback === 32 ){\r
+ xnode[ 'css' ]( 'dxtransform', [ x | 0, y | 0, rotate || 0, skewX || 0, skewY || 0, scaleX, scaleY, obj.altX, obj.altY ] );\r
} else {\r
- x === x && xnode[ 'css' ]( 'left', ( x | 0 ) + 'px' );\r
- y === y && xnode[ 'css' ]( 'top', ( y | 0 ) + 'px' );\r
+ x === x && xnode[ 'css' ]( obj.altX, ( x | 0 ) + 'px' );\r
+ y === y && xnode[ 'css' ]( obj.altY, ( y | 0 ) + 'px' );\r
\r
switch( obj.fallback ){\r
case 4 :\r
};\r
};\r
\r
+ if( obj.doScroll && xnode[ '_rawObject' ] ){\r
+ console.log( 'ok ' + ratio );\r
+ xnode[ '_rawObject' ].scrollLeft = obj.scrollX | 0;\r
+ xnode[ '_rawObject' ].scrollTop = obj.scrollY | 0;\r
+ //X_Node_reserveUpdate();\r
+ };\r
+ \r
alpha === alpha && xnode[ 'css' ]( 'opacity', alpha );\r
};\r
\r