OSDN Git Service

Fix the bug of X.NodeAnime.
[pettanr/clientJs.git] / 0.6.x / js / 02_dom / 04_XBoxModel.js
index acb0939..dbf477a 100644 (file)
@@ -20,7 +20,7 @@ X_ViewPort[ 'listenOnce' ]( X_EVENT_INIT, function(){
                X_Node_BoxModel.CONTENT_BOX;\r
        \r
        if( X_Node_BoxModel_defaultBoxModel === X_Node_BoxModel.CONTENT_BOX ){\r
-               X_Node_BoxModel_boxSizingEnabled = node[ 'cssText' ]( 'width:10px;padding:1px;border:2px solid #0;margin:4px;' +\r
+               X_Node_BoxModel_boxSizingEnabled = node[ 'cssText' ]( 'width:10px;padding:1px;border:2px solid red;margin:4px;' +\r
                        'box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;-o-box-sizing:border-box;-ms-box-sizing:border-box;' )\r
                                                                                        [ 'width' ]() === 10;\r
        };\r
@@ -65,7 +65,7 @@ X_ViewPort[ 'listenOnce' ]( X_EVENT_INIT, function(){
 function X_Node_BoxModel_mesure( that, name ){\r
        var flags = that[ '_flags' ], elm;\r
        \r
-       if( ( flags & X_NodeFlags_IN_TREE ) === 0 || flags & X_NodeFlags_STYLE_IS_DISPLAY_NONE ) return 0;\r
+       if( !that[ '_tag' ] || ( ( flags & X_NodeFlags_IN_TREE ) === 0 ) || ( flags & X_NodeFlags_STYLE_IS_DISPLAY_NONE ) ) return 0;\r
        \r
        X_Node_updateTimerID && X_Node_startUpdate();\r
        \r
@@ -213,43 +213,51 @@ function X_Node_y(){
 };\r
 \r
 /**\r
- * 要素の親要素に対する位置。\r
+ * 要素の文書内の位置。\r
  * @alias Node.prototype.offset\r
  * @return {object} { x: {number}, y : {number} }\r
  * @example node.offset();\r
  */\r
-function X_Node_offset( /* xnodeParent */ ){\r
-       var flags = this[ '_flags' ], elm;\r
+function X_Node_offset(){\r
+       var flags  = this[ '_flags' ],\r
+               offset = { x : 0, y : 0 },\r
+               obj, parent, elm;\r
        \r
-       if( ( flags & X_NodeFlags_IN_TREE ) === 0 || flags & X_NodeFlags_STYLE_IS_DISPLAY_NONE ) return { x : 0, y : 0 };\r
-       \r
-       if( X_Node_body === this || X_Node_html === this ){\r
-               return { x : 0, y : 0 };\r
-       };\r
+       if( ( ( flags & X_NodeFlags_IN_TREE ) === 0 ) || ( flags & X_NodeFlags_STYLE_IS_DISPLAY_NONE ) ) return offset;\r
        \r
+       if( X_Node_body === this || X_Node_html === this ) return offset;\r
+\r
        X_Node_updateTimerID && X_Node_startUpdate();\r
-       \r
+\r
        elm = this[ '_rawObject' ] || X_Node__ie4getRawNode && X_Node__ie4getRawNode( this );\r
        \r
-       return elm ? X_Node_getPosition( elm ) : { x : 0, y : 0 };\r
+       return elm ? X_Node_getPosition( elm ) : offset;\r
 };\r
 \r
 // エレメントの座標取得 ~スクロール要素~\r
-// http://n-yagi.0r2.net/script/2009/06/post_14.html\r
+// http://n-yagi.0r2.net/script/2009/07/post_16.html\r
+\r
+// TODO getClientRects Safari2- ?\r
 \r
 //■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■\r
 //  エレメントの絶対座標を得たい\r
 //------------------------------------------------------------------------------\r
 //  座標取得\r
 var X_Node_getPosition =\r
-       document.documentElement && document.documentElement.getBoundingClientRect ?\r
-               function( el ){\r
-               var pos  = el.getBoundingClientRect(),\r
-                       html = document.documentElement,\r
-                       body = document.body;\r
-               return  {   x:(pos.left +   (body.scrollLeft||html.scrollLeft)  -   html.clientLeft)\r
-                       ,   y:(pos.top  +   (body.scrollTop||html.scrollTop)    -   html.clientTop) };\r
-               } :\r
+       !X_UA[ 'IE4' ] && document.createElement( 'div' ).getBoundingClientRect ?\r
+               (\r
+                       document.compatMode === 'CSS1Compat' && !X_UA[ 'Webkit' ] ? function( el ){\r
+                       var pos  = el.getBoundingClientRect(),\r
+                               html = X_elmHtml;\r
+                       return  {   x:(pos.left + html.scrollLeft - html.clientLeft)\r
+                               ,   y:(pos.top  + html.scrollTop  - html.clientTop) };\r
+                       } :\r
+                       function( el ){\r
+                       var pos  = el.getBoundingClientRect();\r
+                   return  {   x:(pos.left +   window.pageXOffset)\r
+                           ,   y:(pos.top  +   window.pageYOffset)   };\r
+                       }\r
+               ) :\r
        X_UA[ 'Opera' ] < 10 ?\r
                function( el ){\r
             var ex  =   0;\r
@@ -269,7 +277,7 @@ var X_Node_getPosition =
             var ey  =   0;\r
             //\r
             var el  =   target;\r
-            var bd  =   document.body;\r
+            var bd  =   X_elmBody;\r
             \r
             do\r
             { \r