OSDN Git Service

Version 0.6.222, Fix the bug of X.TextRange.
[pettanr/clientJs.git] / 0.6.x / js / 02_dom / 10_XNodeAnime.js
index e856bd8..c851f8e 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
@@ -146,7 +148,7 @@ function X_Node_animate( obj ){
        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
@@ -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
@@ -315,7 +320,7 @@ function X_NodeAnime_stopNow( xnode ){
  */\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
@@ -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,14 @@ 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 ) ){\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