X-Git-Url: http://git.osdn.jp/view?a=blobdiff_plain;f=0.6.x%2Fjs%2F02_dom%2F04_XBoxModel.js;h=d62972be141f2847723798ce4965e1161169b801;hb=b05bf97c1b3b1720e73af54017a48291a364d394;hp=acb093931f962c79f341a1ebdd2c30da220771c7;hpb=86c591d2888cf7b24365c1950646fb1f6190efd1;p=pettanr%2FclientJs.git diff --git a/0.6.x/js/02_dom/04_XBoxModel.js b/0.6.x/js/02_dom/04_XBoxModel.js index acb0939..d62972b 100644 --- a/0.6.x/js/02_dom/04_XBoxModel.js +++ b/0.6.x/js/02_dom/04_XBoxModel.js @@ -65,7 +65,7 @@ X_ViewPort[ 'listenOnce' ]( X_EVENT_INIT, function(){ function X_Node_BoxModel_mesure( that, name ){ var flags = that[ '_flags' ], elm; - if( ( flags & X_NodeFlags_IN_TREE ) === 0 || flags & X_NodeFlags_STYLE_IS_DISPLAY_NONE ) return 0; + if( !that[ '_tag' ] || ( ( flags & X_NodeFlags_IN_TREE ) === 0 ) || ( flags & X_NodeFlags_STYLE_IS_DISPLAY_NONE ) ) return 0; X_Node_updateTimerID && X_Node_startUpdate(); @@ -213,43 +213,51 @@ function X_Node_y(){ }; /** - * 要素の親要素に対する位置。 + * 要素の文書内の位置。 * @alias Node.prototype.offset * @return {object} { x: {number}, y : {number} } * @example node.offset(); */ -function X_Node_offset( /* xnodeParent */ ){ - var flags = this[ '_flags' ], elm; +function X_Node_offset(){ + var flags = this[ '_flags' ], + offset = { x : 0, y : 0 }, + obj, parent, elm; - if( ( flags & X_NodeFlags_IN_TREE ) === 0 || flags & X_NodeFlags_STYLE_IS_DISPLAY_NONE ) return { x : 0, y : 0 }; - - if( X_Node_body === this || X_Node_html === this ){ - return { x : 0, y : 0 }; - }; + if( ( ( flags & X_NodeFlags_IN_TREE ) === 0 ) || ( flags & X_NodeFlags_STYLE_IS_DISPLAY_NONE ) ) return offset; + if( X_Node_body === this || X_Node_html === this ) return offset; + X_Node_updateTimerID && X_Node_startUpdate(); - + elm = this[ '_rawObject' ] || X_Node__ie4getRawNode && X_Node__ie4getRawNode( this ); - return elm ? X_Node_getPosition( elm ) : { x : 0, y : 0 }; + return elm ? X_Node_getPosition( elm ) : offset; }; // エレメントの座標取得 ~スクロール要素~ -// http://n-yagi.0r2.net/script/2009/06/post_14.html +// http://n-yagi.0r2.net/script/2009/07/post_16.html + +// TODO getClientRects Safari2- ? //■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ // エレメントの絶対座標を得たい //------------------------------------------------------------------------------ // 座標取得 var X_Node_getPosition = - document.documentElement && document.documentElement.getBoundingClientRect ? - function( el ){ - var pos = el.getBoundingClientRect(), - html = document.documentElement, - body = document.body; - return { x:(pos.left + (body.scrollLeft||html.scrollLeft) - html.clientLeft) - , y:(pos.top + (body.scrollTop||html.scrollTop) - html.clientTop) }; - } : + !X_UA[ 'IE4' ] && document.createElement( 'div' ).getBoundingClientRect ? + ( + document.compatMode === 'CSS1Compat' && !X_UA[ 'Webkit' ] ? function( el ){ + var pos = el.getBoundingClientRect(), + html = X_elmHtml; + return { x:(pos.left + html.scrollLeft - html.clientLeft) + , y:(pos.top + html.scrollTop - html.clientTop) }; + } : + function( el ){ + var pos = el.getBoundingClientRect(); + return { x:(pos.left + window.pageXOffset) + , y:(pos.top + window.pageYOffset) }; + } + ) : X_UA[ 'Opera' ] < 10 ? function( el ){ var ex = 0; @@ -269,7 +277,7 @@ var X_Node_getPosition = var ey = 0; // var el = target; - var bd = document.body; + var bd = X_elmBody; do {