OSDN Git Service

Version 0.6.216, bug fixes X.WebAudio.
[pettanr/clientJs.git] / 0.6.x / js / 02_dom / 10_XNodeAnime.js
index 580d6da..4320ec1 100644 (file)
@@ -11,7 +11,9 @@ var X_NodeAnime_QUEUE           = [],
        \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
@@ -200,6 +202,9 @@ function X_Node_animate( obj ){
                        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
@@ -351,7 +356,7 @@ function X_NodeAnime_updateAnimations( e ){
                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
@@ -381,8 +386,8 @@ function X_NodeAnime_updateAnimations( e ){
                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
@@ -393,7 +398,7 @@ function X_NodeAnime_updateAnimations( e ){
                                        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
@@ -520,7 +525,7 @@ function X_NodeAnime_updatePosition( xnode, obj, ratio, useGPU ){
        \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 ) ) str += ' translate(' + ( x | 0 ) + 'px,' + ( y | 0 ) + 'px)';\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