クライアント側 js 開発用
Revision | 3d10dbbb167c89638f3bea6c267de8763274d30c (tree) |
---|---|
Time | 2016-01-08 11:39:39 |
Author | itozyun <itozyun@user...> |
Commiter | itozyun |
Version 0.6.206, update X.Node.Anime, bug fixes X.HTMLAudio@getActualCurrentTime.
@@ -30,7 +30,7 @@ var X_UA = X[ 'UA' ] = {}, | ||
30 | 30 | |
31 | 31 | if( sys.indexOf( 'iP' ) === 0 ){ |
32 | 32 | |
33 | - v = dua.split( 'OS ' )[ 1 ].split( '_' ); | |
33 | + v = dav.split( 'OS ' )[ 1 ].split( '_' ); | |
34 | 34 | i = window.devicePixelRatio === 1; |
35 | 35 | /** |
36 | 36 | * @alias X.UA.iOSMajor |
@@ -51,7 +51,7 @@ var X_UA = X[ 'UA' ] = {}, | ||
51 | 51 | * @alias X.UA.iOS |
52 | 52 | * @type {number} |
53 | 53 | */ |
54 | - X_UA[ 'iOS' ] = X_UA[ 'iOSMajor' ] + X_UA[ 'iOSMinor' ] / 10; | |
54 | + X_UA[ 'iOS' ] = X_UA[ 'iOSMajor' ] + X_UA[ 'iOSMinor' ] / 10; | |
55 | 55 | |
56 | 56 | // 4:3 model |
57 | 57 | v = screen.width === screen.height * 1.5 || screen.width * 1.5 === screen.height; |
@@ -123,6 +123,7 @@ var X_UA = X[ 'UA' ] = {}, | ||
123 | 123 | }; |
124 | 124 | //alert( 'iPod touch ' + ( X_UA[ 'iPod_3' ] ? '3以下' : X_UA[ 'iPod_4' ] ? '4以下' : '5以上' ) ); |
125 | 125 | }; |
126 | + // TODO iPhone Simulator | |
126 | 127 | |
127 | 128 | console.log( '>> iOS : ' + X_UA[ 'iOS' ] ); |
128 | 129 | } else |
@@ -458,7 +459,7 @@ var X_UA = X[ 'UA' ] = {}, | ||
458 | 459 | X_UA[ 'MacIE' ] = true; |
459 | 460 | }; |
460 | 461 | |
461 | - if( 0 < dua.toLowerCase().indexOf( 'iemobile' ) || X_UA[ 'WinCE' ] ){ | |
462 | + if( 0 < dua.indexOf( 'IEMobile' ) || X_UA[ 'WinCE' ] ){ | |
462 | 463 | /** |
463 | 464 | * @alias X.UA.IEMobile |
464 | 465 | * @type {boolean} |
@@ -466,7 +467,7 @@ var X_UA = X[ 'UA' ] = {}, | ||
466 | 467 | X_UA[ 'IEMobile' ] = true; |
467 | 468 | }; |
468 | 469 | |
469 | - if( 0 < dua.toLowerCase().indexOf( 'windows phone' ) || 0 < dav.indexOf( 'ZuneWP' ) ){ | |
470 | + if( 0 < dua.indexOf( 'Windows Phone' ) || 0 < dav.indexOf( 'ZuneWP' ) ){ | |
470 | 471 | /** |
471 | 472 | * @alias X.UA.WinPhone |
472 | 473 | * @type {boolean} |
@@ -489,14 +489,14 @@ function X_Node_CSS_objToIEFilterText( that, opt_css, opt_cssList ){ | ||
489 | 489 | + params[ 1 ]; |
490 | 490 | |
491 | 491 | //console.log( ow + ' ' + oh ) |
492 | - elm.style.left = dx + 'px'; | |
493 | - elm.style.top = dy + 'px'; | |
492 | + elm.style[ params[ 7 ] ] = dx + 'px'; // left or right | |
493 | + elm.style[ params[ 8 ] ] = dy + 'px'; // top or bottom | |
494 | 494 | |
495 | 495 | //フィルターで回転と拡大縮小を加えます。 |
496 | 496 | return 'progid:DXImageTransform.Microsoft.Matrix(' + |
497 | 497 | // 'Dx=' + dx + |
498 | 498 | //',Dy=' + dy + |
499 | - 'M11=' + m11 + | |
499 | + 'M11=' + m11 + | |
500 | 500 | ',M12=' + m12 + |
501 | 501 | ',M21=' + m21 + |
502 | 502 | ',M22=' + m22 + |
@@ -7,14 +7,12 @@ var X_NodeAnime_QUEUE = [], | ||
7 | 7 | |
8 | 8 | X_NodeAnime_hasTransform = !!X_Node_CSS_VENDER_PREFIX[ 'transform' ], |
9 | 9 | |
10 | - X_NodeAnime_hasDXTransform = 5.5 <= X_UA[ 'IE' ] && X_UA[ 'IE' ] < 9 && X_UA[ 'ActiveX' ], | |
10 | + X_NodeAnime_hasDXTransform = 5.5 <= X_UA[ 'IE' ] && X_UA[ 'IE' ] < 9 && X_UA[ 'ActiveX' ], // IEHost が 11 の場合不可 | |
11 | 11 | |
12 | 12 | /* Opera mobile で translateZ(0) が有効だと XY が 0 0 になる */ |
13 | 13 | /* GPUレイヤーにいる間に要素のコンテンツを変更をすると transitionend が動かなくなるっぽい Mac safari と firefox */ |
14 | 14 | X_NodeAnime_translateZ = X_Node_CSS_VENDER_PREFIX[ 'perspective' ] && !X_UA[ 'OperaMobile' ] && !X_UA[ 'OperaTablet' ] ? ' translateZ(0)' : '', |
15 | 15 | |
16 | - X_NodeAnime_transitionProps = X_NodeAnime_hasTransform ? X_Node_CSS_VENDER_PREFIX[ 'transform' ] : 'left,top'; | |
17 | - | |
18 | 16 | /* |
19 | 17 | * phase: |
20 | 18 | * 0: アニメーション無 |
@@ -27,7 +25,7 @@ var X_NodeAnime_QUEUE = [], | ||
27 | 25 | * 7: アニメーション中 |
28 | 26 | */ |
29 | 27 | |
30 | -var X_NODE_ANIME_RESET = 1, | |
28 | + X_NODE_ANIME_RESET = 1, | |
31 | 29 | X_NODE_ANIME_STAY_GPU = 2, |
32 | 30 | |
33 | 31 | X_NodeAnime_DEFAULT = { |
@@ -47,7 +45,7 @@ var X_NODE_ANIME_RESET = 1, | ||
47 | 45 | scrollY : NaN, fromScrollY : NaN, toScrollY : NaN //, |
48 | 46 | //doScroll : false//, |
49 | 47 | //duration : 0 |
50 | - //phase, lazyRelease, easing, follower, releaseNow, inited, progress doScroll, fallbackKind | |
48 | + //phase, lazyRelease, easing, follower, releaseNow, inited, progress, fallback | |
51 | 49 | // fromTime, toTime |
52 | 50 | }; |
53 | 51 |
@@ -144,6 +142,8 @@ function X_Node_animate( obj ){ | ||
144 | 142 | obj.transform = ( X_Type_isFinite( obj.x ) || X_Type_isFinite( obj.y ) || obj.lazyRelease ) && X_NodeAnime_hasTransform; |
145 | 143 | obj.doScroll = 0 <= obj.toScrollX || 0 <= obj.toScrollY; |
146 | 144 | obj.fallback = 0; |
145 | + obj.altX = fallback & 8 ? 'right' : 'left'; | |
146 | + obj.altY = fallback & 16 ? 'bottom' : 'top'; | |
147 | 147 | |
148 | 148 | // scale |
149 | 149 | if( obj.toScaleX !== 1 && obj.fromScaleX !== 1 && obj.toScaleY !== 1 && obj.fromScaleY !== 1 ){ |
@@ -152,8 +152,8 @@ function X_Node_animate( obj ){ | ||
152 | 152 | if( X_NodeAnime_hasTransform ){ |
153 | 153 | obj.transform = true; |
154 | 154 | } else |
155 | - if( X_NodeAnime_hasDXTransform && ( fallback & 16 ) ){ // DX Transform | |
156 | - obj.fallback = 16; | |
155 | + if( X_NodeAnime_hasDXTransform && ( fallback & 32 ) ){ // DX Transform | |
156 | + obj.fallback = 32; | |
157 | 157 | } else |
158 | 158 | if( ( fallback & 4 ) && sameRate ){ // zoom |
159 | 159 | obj.fallback = 4; |
@@ -171,8 +171,8 @@ function X_Node_animate( obj ){ | ||
171 | 171 | if( X_NodeAnime_hasTransform ){ |
172 | 172 | obj.transform = true; |
173 | 173 | } else |
174 | - if( X_NodeAnime_hasDXTransform && ( fallback & 16 ) ){ // DX Transform | |
175 | - obj.fallback = 16; | |
174 | + if( X_NodeAnime_hasDXTransform && ( fallback & 32 ) ){ // DX Transform | |
175 | + obj.fallback = 32; | |
176 | 176 | }; |
177 | 177 | }; |
178 | 178 |
@@ -549,11 +549,11 @@ function X_NodeAnime_updatePosition( xnode, obj, ratio, useGPU ){ | ||
549 | 549 | }; |
550 | 550 | }; |
551 | 551 | } else |
552 | - if( obj.fallback === 16 ){ | |
553 | - xnode[ 'css' ]( 'dxtransform', [ x | 0, y | 0, rotate || 0, skewX || 0, skewY || 0, scaleX, scaleY ] ); | |
552 | + if( obj.fallback === 32 ){ | |
553 | + xnode[ 'css' ]( 'dxtransform', [ x | 0, y | 0, rotate || 0, skewX || 0, skewY || 0, scaleX, scaleY, obj.altX, obj.altY ] ); | |
554 | 554 | } else { |
555 | - x === x && xnode[ 'css' ]( 'left', ( x | 0 ) + 'px' ); | |
556 | - y === y && xnode[ 'css' ]( 'top', ( y | 0 ) + 'px' ); | |
555 | + x === x && xnode[ 'css' ]( obj.altX, ( x | 0 ) + 'px' ); | |
556 | + y === y && xnode[ 'css' ]( obj.altY, ( y | 0 ) + 'px' ); | |
557 | 557 | |
558 | 558 | switch( obj.fallback ){ |
559 | 559 | case 4 : |
@@ -570,8 +570,8 @@ function X_NodeAnime_updatePosition( xnode, obj, ratio, useGPU ){ | ||
570 | 570 | |
571 | 571 | if( obj.doScroll && xnode[ '_rawObject' ] ){ |
572 | 572 | console.log( 'ok ' + ratio ); |
573 | - xnode[ '_rawObject' ].scrollLeft = obj.scrollX | 0; | |
574 | - xnode[ '_rawObject' ].scrollTop = obj.scrollY | 0; | |
573 | + xnode[ '_rawObject' ].scrollLeft = obj.scrollX | 0; | |
574 | + xnode[ '_rawObject' ].scrollTop = obj.scrollY | 0; | |
575 | 575 | //X_Node_reserveUpdate(); |
576 | 576 | }; |
577 | 577 |
@@ -330,7 +330,7 @@ if( X_Audio_constructor ){ | ||
330 | 330 | break; |
331 | 331 | |
332 | 332 | case 'seeked' : |
333 | - if( this._seekingFixON ) this._seekingFixON = false; | |
333 | + if( X_HTMLAudio_seekingFixIOS ) this._seekingFixON = false; | |
334 | 334 | break; |
335 | 335 | |
336 | 336 | case 'waiting' : // 次のフレームが利用不可のため再生を停止したが、そのフレームがやがて利用可能になると想定している場合に発生 |
@@ -507,6 +507,7 @@ if( X_Audio_constructor ){ | ||
507 | 507 | getActualCurrentTime : function(){ |
508 | 508 | return ( X_HTMLAudio_currentTimeFix ? |
509 | 509 | X_Timer_now() - this._currentFixStart + this._currentFixBegin : |
510 | + this._seekingFixON ? this._lastCurrentTime * 1000 : | |
510 | 511 | this[ '_rawObject' ].currentTime * 1000 | 0 ); |
511 | 512 | }, |
512 | 513 | /* |