Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用JavaScript查找HTML元素的X/Y_Javascript_Html - Fatal编程技术网

使用JavaScript查找HTML元素的X/Y

使用JavaScript查找HTML元素的X/Y,javascript,html,Javascript,Html,如果HTML元素(DIV)没有显式设置,如何从JavaScript中找到它们的XY坐标?这可能会很棘手,具体取决于浏览器和版本。我建议使用和positions插件。我不确定你需要它做什么,而且这些东西总是相对的(屏幕、窗口、文档)。但当我需要弄明白这一点时,我发现这个网站很有用: 我还发现有人为jQuery制作的工具提示插件对x,y定位技巧有各种有趣的见解(看看它的viewport类和jQuery为它提供的底层支持)。 您可以使用Prototype或jQuery之类的库,也可以使用: 它返回一

如果HTML元素(DIV)没有显式设置,如何从JavaScript中找到它们的XY坐标?

这可能会很棘手,具体取决于浏览器和版本。我建议使用和positions插件。

我不确定你需要它做什么,而且这些东西总是相对的(屏幕、窗口、文档)。但当我需要弄明白这一点时,我发现这个网站很有用:

我还发现有人为jQuery制作的工具提示插件对x,y定位技巧有各种有趣的见解(看看它的viewport类和jQuery为它提供的底层支持)。

您可以使用Prototype或jQuery之类的库,也可以使用:

它返回一个数组

myPos = findPos(document.getElementById('something'))
x = myPos[0]
y = myPos[1]

function findPos(obj) {
  var curleft = curtop = 0;
  if (obj.offsetParent) {
    curleft = obj.offsetLeft
    curtop = obj.offsetTop
    while (obj = obj.offsetParent) {
      curleft += obj.offsetLeft
      curtop += obj.offsetTop
    }
  }
  return [curleft,curtop];
}
我是这样做的:

// Based on: http://www.quirksmode.org/js/findpos.html
var getCumulativeOffset = function (obj) {
    var left, top;
    left = top = 0;
    if (obj.offsetParent) {
        do {
            left += obj.offsetLeft;
            top  += obj.offsetTop;
        } while (obj = obj.offsetParent);
    }
    return {
        x : left,
        y : top
    };
};

值得一提的是,这里有一个递归版本:

function findPos(element) {
  if (element) {
    var parentPos = findPos(element.offsetParent);
    return [
      parentPos.X + element.offsetLeft,
      parentPos.Y + element.offsetTop
    ];
  } else {
    return [0,0];
  }
}

您可以向
元素添加两个属性。prototype
可以获取任何元素的顶部/左侧

window.Object.defineProperty(Element.prototype,'documentOffsetop'{
get:function(){返回this.offsetTop+(this.offsetParent?this.offsetParent.documentOffsetTop:0);}
} );
window.Object.defineProperty(Element.prototype,'documentOffsetLeft'{
get:function(){返回this.offsetLeft+(this.offsetParent?this.offsetParent.documentOffsetLeft:0);}
} );

下面是一个将结果与jQuery的
offset()进行比较的演示。顶部
。左侧

大多数位置插件现在都是jQuery核心的一部分。所以你可以只做$(element).offset({relativeTo:“body”})-它会给你对象相对于主体的顶部和左侧。很好,我已经几个月没有下载jQuery了,很高兴知道他们把它放进去了。+1对于jQuery offset你应该把属性给quirksmode.org,该函数看起来非常熟悉。我想我更喜欢您返回对象的想法,而不是Peter Paul Koch在其原始解决方案中选择返回数组。根据parentPos关闭为重复。X应为parentPos[0],parentPos.Y应为parentPos[1]