OSDN Git Service

Version 0.6.172, bugfix...
[pettanr/clientJs.git] / 0.6.x / js / 02_dom / 04_XBoxModel.js
index acb0939..a609fc4 100644 (file)
@@ -213,43 +213,49 @@ function X_Node_y(){
 };\r
 \r
 /**\r
- * 要素の親要素に対する位置。\r
+ * 要素の文書内の位置。引数に xnode を与えた場合、\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( xnode ){\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
 //■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■\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 = document.documentElement;\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