程序员の必经之路Web前端之路让前端飞

JavaScript -- 元素大小和位置

2017-03-31  本文已影响107人  ghwaphon

JavaScript 操作 DOM 的过程中我们可能需要经常获取一个元素的大小,在处理鼠标事件的时候可能需要知道当前鼠标的点击位置,所以我将我在开发过程中使用的一些相关属性记录下来。

1. 偏移量

如果我们想知道一个元素相对于其父元素的偏移量,可以用以下几个属性获取到我们想要的数值。

如果想计算出一个元素相对于整个页面的偏移量,那我们可以使用 offsetParent 协助完成,比如获取一个元素相对于页面的 offsetLeft

    function getLeft(element) {
        var left = element.offsetLeft;
        var current = element.offsetParent;

        while(current !== null) {
            left += current.offsetLeft;
            current = current.offsetParent;
        }

        return left;
    }

当然,如果想获取一个元素相对于整个页面的 offsetTop,也可以使用同样的方式。

2. 客户区大小

有的时候我们想要知道用户的浏览器到底有多宽,有多高,这就需要借助于 clientWidthclientHeight 了。clientWidth 返回的是元素的内容宽度与内边距宽度相加之和,clientHeight 返回的是元素的的内容高度与内边距高度相加之和。

可见,相比于上面介绍的 offsetWidthoffsetHeightclientHeightclientWidth 省略了边框的宽度。所以其实我们可以通过这两种方式计算用户的浏览器视口大小。

    function getViewPort() {
        return {
            width: document.documentElement.clientWidth,
            height: document.documentElement.clientHeight
        };
    }

当然,我们也可以使用另一种方式

    function getViewPort() {
        return {
            width: document.documentElement.offsetWidth,
            height: document.documentElement.offsetHeight
        };
    }

不过值得注意的是,这两种方法是存在差异的,当 html 元素没有充满整个浏览器视口的时候,使用偏移量的方法会返回 html 的实际高度和宽度,而 clientWidthclientHeight 会返回当前浏览器的可见区域大小,所以说对于 html 未充满屏幕的时候,我们想达到计算浏览器视口大小的功能,也可以添加如下 CSS 代码。

    html, body {
        height: 100%;
    }

3. 滚动大小

当实现瀑布流的时候可能会用到滚动属性,因为我们的数据不是一次性就加载完毕的,而是随着用户的滚动而动态的加载数据。下面是四个与滚动大小有关的属性。

不过值得注意的是, 如果我们想取得当前页面的滚动位置时,在 Opera, Chrome 都可以通过 document.body.scrollTop 来获取,但是这个方法在 Firefox 需要通过 document.documentElement.scrollTop 来获取。所以我们可以投机取巧的采用以下方法获取当前浏览器的滚动位置。

    function getScrollTop() {
        var scrollTop = Math.max(document.documentElement.scrollTop, document.body.scrollTop);
        return scrollTop;
    }

4. 关于位置

上一篇下一篇

猜你喜欢

热点阅读