\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
+ X_NodeAnime_translateZ = X_Node_CSS_VENDER_PREFIX[ 'perspective' ] &&\r
+ !X_UA[ 'OperaMobile' ] && !X_UA[ 'OperaTablet' ] &&\r
+ !( X_UA[ 'IE' ] === 11 ) && !( X_UA[ 'IEHost' ] === 11 ) ? ' translateZ(0)' : '',\r
\r
/*\r
* phase:\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.phase = 4; // 強制停止(GPU転送予約)または値のみ更新\r
obj.releaseNow = false; // TODO folower がいるため GPU 転送できないケースあり\r
X_NodeAnime_needsDetection = true;\r
+ } else {\r
+ obj.phase = 1;\r
+ X_NodeAnime_needsDetection = true;\r
};\r
\r
if( !X_NodeAnime_reserved ){\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
now = X_Timer_now(),\r
c = false,\r
i, xnode, obj, _xnode,\r
- rm, easing, lazy;\r
+ rm, progress, easing, lazy;\r
\r
if( X_NodeAnime_needsDetection ){\r
X_NodeAnime_needsDetection = false;\r
switch( obj.phase ){\r
case 7 : // アニメーション中\r
if( now < obj.toTime ){\r
- obj.progress = ( now - obj.fromTime ) / obj.duration;\r
- easing = obj.easing( obj.progress );\r
+ obj.progress = progress = ( now - obj.fromTime ) / obj.duration;\r
+ easing = obj.easing( progress );\r
obj.x = ( obj.toX - obj.fromX ) * easing + obj.fromX;\r
obj.y = ( obj.toY - obj.fromY ) * easing + obj.fromY;\r
obj.rotate = ( obj.toRotate - obj.fromRotate ) * easing + obj.fromRotate;\r
obj.alpha = ( obj.toAlpha - obj.fromAlpha ) * easing + obj.fromAlpha;\r
obj.scrollX = ( obj.toScrollX - obj.fromScrollX ) * easing + obj.fromScrollX;\r
obj.scrollY = ( obj.toScrollY - obj.fromScrollY ) * easing + obj.fromScrollY;\r
- X_NodeAnime_updatePosition( xnode, obj, obj.progress, true );\r
+ X_NodeAnime_updatePosition( xnode, obj, progress, true );\r
c = true;\r
break;\r
};\r
\r
//console.log( 'updatePosition x:' + x + ' gpu:' + !!useGPU );\r
if( obj.transform ){\r
- if( x === x || y === y ) str += ' translate(' + ( x | 0 ) + 'px,' + ( y | 0 ) + 'px)';\r
+ if( ( x === x || y === y ) && ( x !== 0 && y !== 0 ) ){\r
+ if( X_UA[ 'Safari' ] && X_UA[ 'Windows' ] ){\r
+ // http://shinimae.hatenablog.com/entry/2016/01/13/151748\r
+ str = ' -webkit-translate(' + ( x | 0 ) + 'px,' + ( y | 0 ) + 'px)';\r
+ } else {\r
+ str = ' translate(' + ( x | 0 ) + 'px,' + ( y | 0 ) + 'px)';\r
+ };\r
+ };\r
if( rotate < 0 || 0 < rotate ) str += ' rotate(' + rotate + 'deg)'; // opera は rad?\r
if( skewX < 0 || 0 < skewX ) str += ' skewX(' + skewX + 'deg)';\r
if( skewY < 0 || 0 < skewY ) str += ' skewY(' + skewY + 'deg)';\r