代码html那些年学过的技术

JS & jQuery 获取元素位置尺寸

2015-11-18  本文已影响7185人  amnsss

jQuery

位置

尺寸

JS

window

screen

元素属性

获取元素相对位置和绝对位置

下面两个函数可以用来获取元素绝对位置(相对于页面)的横坐标和纵坐标。
element.offsetParent: 获取离元素最近的定位祖先元素

function getElementLeft(element){
    var actualLeft = element.offsetLeft;
    var current = element.offsetParent;
    while (current !== null){
        actualLeft += current.offsetLeft;
        current = current.offsetParent;
    }
    return actualLeft;
}
function getElementTop(element){
    var actualTop = element.offsetTop;
    var current = element.offsetParent;
    while (current !== null){
        actualTop += current.offsetTop;
        current = current.offsetParent;
    }
    return actualTop;
}

由于在表格和iframe中,offsetParent对象未必等于父容器,所以上面的函数对于表格和iframe中的元素不适用。
有了绝对位置以后,获得相对位置(相对于浏览器窗口)就很容易了,只要将绝对坐标减去页面的滚动条滚动的距离就可以了。滚动条滚动的垂直距离,是document对象的scrollTop属性;滚动条滚动的水平距离是document对象的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;
}

**说明: **
document.compatMode用来判断浏览器渲染模式:
BackCompat:标准兼容模式关闭 document.body返回正确值
CSS1Compat:标准兼容模式开启 document.documentElement返回正确值
当document.compatMode等于BackCompat时,浏览器客户区宽度是document.body.clientWidth;当document.compatMode等于CSS1Compat时,浏览器客户区宽度是document.documentElement.clientWidth。

**补充: **
scrollTop和scrollLeft属性是可以赋值的,并且会立即自动滚动网页到相应位置,因此可以利用它们改变网页元素的相对位置。另外,element.scrollIntoView()方法也有类似作用,可以使网页元素出现在浏览器窗口的左上角, 详细可以百度百度。

关于document.body与document.documentElement

可以认为document.body对应于body标签元素, document.documentElement对应于html标签元素. 但它们在如上, 获取元素尺寸属性时会有些不同.

body和html更多内容可以参考我另一篇文章

上一篇下一篇

猜你喜欢

热点阅读