风行者 发表于 2010-6-16 12:40:36

[已解决]IE对象位置问题

本帖最后由 风行者 于 2010-6-29 22:20 编辑

有没有方法得到IE对象在屏幕的位置

deliy 发表于 2010-6-29 14:50:50

你是要坐标还是要什么?
坐标就用AutoIt Window Info查啊。

lynfr8 发表于 2010-6-29 19:15:42

本帖最后由 lynfr8 于 2010-6-29 19:19 编辑

#include <IE.au3>
$oIE = _IE_Example("form")
$oSubmit = _IEGetObjByName ($oIE, 'textExample' )
MsgBox(0,'相对位置','左'&$oSubmit.getBoundingClientRect().left&'|上'&$oSubmit.getBoundingClientRect().top&'|宽'&$oSubmit.offsetWidth&'|高'&$oSubmit.offsetHeight)

相关网页方面的参考资料:
*********************************************************************************
http://hi.baidu.com/adoblog/blog/item/2bfa3a1038c8b3f4c2ce7930.html
网页元素定位:位置与尺寸详解offsetLeft、clientHeight、scrollLeft、clientLeft
...(省略部分,但也非常重要)...

假设 obj 为某个 HTML 控件。

obj.offsetTop 指 obj 距离上方或上层控件的位置,整型,单位像素。

obj.offsetLeft 指 obj 距离左方或上层控件的位置,整型,单位像素。

obj.offsetWidth 指 obj 控件自身的宽度,整型,单位像素。

obj.offsetHeight 指 obj 控件自身的高度,整型,单位像素。

*********************************************************************************
javascript获取元素位置代码总结
http://cuckoosnest.javaeye.com/blog/469935
...(省略部分,但也非常重要)...
五、获取网页元素的相对位置
有了某个元素的绝对位置以后,获得相对位置就很容易了,只要将绝对坐标减去滚动条滚动的距离就可以了。
滚动条滚动的垂直距离,是document对象的scrollTop属性;滚动条滚动的水平距离是document对象的scrollLeft属性。



(图四 scrollTop和scrollLeft属性)
对上一节中的两个函数进行相应的改写:
  function getElementViewLeft(element){
    var actualLeft = element.offsetLeft;
    var current = element.offsetParent;
    while (current !== null){
      actualLeft += current.offsetLeft;
      current = current.offsetParent;
    }
    if (document.compatMode == "BackCompat"){
      var elementScrollLeft=document.body.scrollLeft;
    } else {
      var elementScrollLeft=document.documentElement.scrollLeft;
    }
    return actualLeft-elementScrollLeft;
  }
  function getElementViewTop(element){
    var actualTop = element.offsetTop;
    var current = element.offsetParent;
    while (current !== null){
      actualTop += current. offsetTop;
      current = current.offsetParent;
    }
     if (document.compatMode == "BackCompat"){
      var elementScrollTop=document.body.scrollTop;
    } else {
      var elementScrollTop=document.documentElement.scrollTop;
    }
    return actualTop-elementScrollTop;
  }
scrollTop和scrollLeft属性是可以赋值的,并且会立即自动滚动网页到相应位置,因此可以利用它们改变网页元素的相对位置。
另外,element.scrollIntoView()方法也有类似作用,可以使网页元素出现在浏览器窗口的左上角。
六、获取元素位置的快速方法
除了上面的函数以外,还有一种快速方法,可以立刻获得网页元素的位置。
那就是使用getBoundingClientRect()方法。它返回一个对象,其中包含了left、right、top、bottom四个属性,
分别对应了该元素的左上角和右下角相对于浏览器窗口(viewport)左上角的距离。
所以,网页元素的相对位置就是
  var X= this.getBoundingClientRect().left;

  var Y =this.getBoundingClientRect().top;
再加上滚动距离,就可以得到绝对位置
  var X= this.getBoundingClientRect().left+document.documentElement.scrollLeft;

  var Y =this.getBoundingClientRect().top+document.documentElement.scrollTop;
目前,IE、Firefox 3.0+、Opera 9.5+都支持该方法,而Firefox 2.x、Safari、Chrome、Konqueror不支持。

风行者 发表于 2010-6-29 22:19:44

非常感谢楼上的帮助

zcx880517 发表于 2010-6-30 11:01:28

回复 3# lynfr8


    额。。挺深奥的,,拿回去琢磨琢磨。。3Q

Kay_Hu 发表于 2010-6-30 11:30:16

$array = WinGetPos("","")

这个可以吗?
WinGetPos
--------------------------------------------------------------------------------

Retrieves the position and size of a given window.


WinGetPos ( "title" [, "text"] )




Parameters

title The title of the window to read. See Title special definition.
text The text of the window to read.



Return Value

Success: Returns a 4-element array containing the following information:
$array = X position
$array = Y position
$array = Width
$array = Height
Failure: Returns 0 and sets @error to 1 if windows is not found.
页: [1]
查看完整版本: [已解决]IE对象位置问题