【问题标题】:how to find coordinates of an HTML button or image, cross browser?如何跨浏览器查找 HTML 按钮或图像的坐标?
【发布时间】:2010-10-24 04:13:13
【问题描述】:

最近在 comp.lang.javascript 中有一个关于此的线程,其中 宣布胜利,但没有发布代码:

在 HTML 页面上,如何找到元素(例如图像或按钮)的左下角坐标 跨浏览器和页面样式可靠吗?在某些情况下,“Ajax in Action”(我有副本)中提倡的方法在 IE 中似乎不起作用。为了使问题更简单,假设我们可以将全局文档样式设置为“传统”或“过渡”或其他。

请提供代码或指向代码的指针(适用于所有浏览器的完整功能)——不要只说“这很容易”并喋喋不休地谈论遍历 DOM 的内容——如果我想阅读那种我会回到 comp.lang.javascript。如果这是重复的,请骂我并指出解决方案——我确实试图找到它。

【问题讨论】:

  • Holy (*&^。我刚刚查看了 jquery 解决方案:向 DOM 添加一个隐藏元素,其中包含所有可能的标签,然后对几何约定进行逆向工程。网络真是太棒了!跨度>

标签: javascript html dom


【解决方案1】:

我从网上找到了这个解决方案...这完全解决了我的问题。 请检查此链接的来源。 http://www.quirksmode.org/js/findpos.html

/** This script finds the real position, 
 * so if you resize the page and run the script again, 
 * it points to the correct new position of the element.
 */
function findPos(obj){
   var curleft = 0;
   var curtop = 0;

   if (obj.offsetParent) {
      do {
         curleft += obj.offsetLeft;
         curtop += obj.offsetTop;
      } while (obj = obj.offsetParent);

      return {X:curleft,Y:curtop};
   }
}

在 Firefox、IE8、Opera 中完美运行(希望其他人也如此) 感谢那些分享他们知识的人...... 问候,

动态麦克风

【讨论】:

    【解决方案2】:

    试试这个:

    var elm = document.getElementById('foo');
    var point = {x:0,y:elm.offsetHeight}; // Change to y:0 to get the top-left
    
    while (elm)
    {
        // This will get you the position relative to the absolute container,
        // which is what you need for positioning an element within it
        if (elm.style.position == 'absolute')
            break;
    
        point.x += elm.offsetLeft;
        point.y += elm.offsetTop;
    
        elm = elm.offsetParent;
    }
    

    【讨论】:

    • 当然 aaron.oirt.rutgers.edu/myapp/docs/W.intro>http://…>。如果我尝试在 IE 上使用该算法定位脚注,它们会显示在页面右侧。
    • 嗯,对我来说实际上看起来不错。很难阅读您的 HTML,但我注意到您使用的是 position:absolute,这可能会把事情搞砸。我已经修改了代码 - 试试看
    【解决方案3】:

    我一直在使用这个,适用于 IE 和 Firefox。

    var Target = document.getElementById('SomeID'); var Pos = findPos(目标); AnotherObj = document.getElementById('AnotherID'); 另一个对象 .style.top = Pos[1] + "px"; 另一个对象 .style.left = Pos[0] + "px"; //------------------------------------ 函数 findPos(obj) { //---------------------------------------- var curleft = curtop = 0; 如果(obj.offsetParent){ 做 { curleft += obj.offsetLeft; curtop += obj.offsetTop; } 而 (obj = obj.offsetParent); 返回 [curleft,curtop]; } }

    【讨论】:

    • 如前所述,这并不能始终如一地工作。可能是如果我使用“严格” html 或任何它会开始工作的东西。请告知这是否是诀窍。 jquery 库似乎表明您还需要考虑诸如边距之类的事情,而上述内容并未处理。
    【解决方案4】:

    在 jQuery 中:

    var jq = $('#yourElement');
    var position = jq.offset();
    alert('x: ' + position.left + ', y: ' + position.top);
    
    var bottomLeftPixelPosition =
        { left: position.left, top: position.top + jq.height() - 1; };
    

    【讨论】:

      【解决方案5】:

      根据我的经验,让这样的东西工作的唯一可靠方法是使用JQuery(不要害怕,它只是一个你必须包含的外部脚本文件)。然后你可以使用像

      这样的语句
      $('#element').position()
      

      或

      $('#element').offset()
      

      获取当前坐标,这在我迄今为止遇到的所有浏览器中都非常有效。

      【讨论】:

      • 30k 那个?好吧,至少我可以看看并尝试看看他们是如何实现它的——假设我可以找到一个未压缩的源。
      • 我刚刚查看了 JQuery 源代码,这些函数似乎是相互依赖的。太多以至于只提取几行代码(至少按照我的口味)。我通常讨厌这样做的人,但我现在要继续前进并成为其中之一:JQuery 将为您省去很多麻烦,而且 30k 对于将在请求中缓存的东西来说并不是那么多数据.从通常讨厌框架的人那里拿走它;-)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-11-06
      • 2015-11-16
      • 1970-01-01
      • 2018-04-20
      相关资源
      最近更新 更多