最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

javascriptYUI读码日记之YAHOO.util.Dom-Part.4_YUI.Ext相关

来源:动视网 责编:小采 时间:2020-11-27 20:38:45
文档

javascriptYUI读码日记之YAHOO.util.Dom-Part.4_YUI.Ext相关

javascriptYUI读码日记之YAHOO.util.Dom-Part.4_YUI.Ext相关:var getXY = function() { // 判断是否是 IE if (document.documentElement.getBoundingClientRect) { // 注1 return function(el) { var box = el.getBoundingClientRect(); var rootNode =
推荐度:
导读javascriptYUI读码日记之YAHOO.util.Dom-Part.4_YUI.Ext相关:var getXY = function() { // 判断是否是 IE if (document.documentElement.getBoundingClientRect) { // 注1 return function(el) { var box = el.getBoundingClientRect(); var rootNode =


var getXY = function() {
// 判断是否是 IE
if (document.documentElement.getBoundingClientRect) {
// 注1
return function(el) {
var box = el.getBoundingClientRect();

var rootNode = el.ownerDocument;
return [box.left +
Y.Dom.getDocumentScrollLeft(rootNode), box.top +
Y.Dom.getDocumentScrollTop(rootNode)];
};
} else {
return function(el) {
var pos = [el.offsetLeft, el.offsetTop];
var parentNode = el.offsetParent;

// 判断是否在 Safari 下,节点是否为 absolute ,
// 并且父元素是否为 body
// 注2.
var accountForBody = (isSafari &&
Y.Dom.getStyle(el, 'position') == 'absolute' &&
el.offsetParent == el.ownerDocument.body);

// 如果父元素不是自身
if (parentNode != el) {
while (parentNode) {
pos[0] += parentNode.offsetLeft;
pos[1] += parentNode.offsetTop;
if (!accountForBody && isSafari &&
Y.Dom.getStyle(parentNode,'position')
== 'absolute' ) {
accountForBody = true;
}
parentNode = parentNode.offsetParent;
}
}

// 还是针对 Safari 的
if (accountForBody) { //safari doubles in this case
pos[0] -= el.ownerDocument.body.offsetLeft;
pos[1] -= el.ownerDocument.body.offsetTop;
}
parentNode = el.parentNode;

// account for any scrolled ancestors
while ( parentNode.tagName &&
!patterns.ROOT_TAG.test(parentNode.tagName) )
{
// work around opera inline/table scrollLeft/Top bug
// 注3.
if (Y.Dom.getStyle(parentNode, 'display')
.search(/^inline|table-row.*$/i)) {
pos[0] -= parentNode.scrollLeft;
pos[1] -= parentNode.scrollTop;
}

parentNode = parentNode.parentNode;
}

return pos;
};
}
}() // NOTE: Executing for loadtime branching注. 有关 IE 的 getBoundingClientRect 方法,可以参考这里。
注. Safari 的 BUG,详细情况参见这里。
注. 参见老外的原话(出处):
"- Remove parent scroll UNLESS that parent is inline or a table
to work around Opera inline/table scrollLeft/Top bug"
Fixed in Opera 9.5. (also, Opera 9.5 supports getBoundingClientRect
and getClientRects.)最后,有关更多 DOM 的兼容性,可以参看 PPK 的总结(怎么又是他)。

文档

javascriptYUI读码日记之YAHOO.util.Dom-Part.4_YUI.Ext相关

javascriptYUI读码日记之YAHOO.util.Dom-Part.4_YUI.Ext相关:var getXY = function() { // 判断是否是 IE if (document.documentElement.getBoundingClientRect) { // 注1 return function(el) { var box = el.getBoundingClientRect(); var rootNode =
推荐度:
标签: 日记 javascript DOM
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top