javascript - obj = obj.offsetParent;是什么意思?
ringa_lee
ringa_lee 2017-04-10 17:52:11
[JavaScript讨论组]

RT obj = obj.offsetParent;是什么意思?

以前很少用原生JS,都是用JQ获取某个元素距离页面顶部的偏移量,像这样:

var offsetTop = $(obj).offset().top;

然后在用原生js的时候需要获取多层嵌套的任意元素相于<body>顶部的偏移量要这样:

function getTop(obj) {
    var iTop = 0;
    while (obj != window.document.body && obj != null) {
        iTop += obj.offsetTop;
        obj = obj.offsetParent;
    }
    return iTop;
}

这里的obj = obj.offsetParent没明白是什么意思,我去掉这句后,运行时,浏览器直接卡死了,说明while变成了无限循环。。那么就是obj变成了body或者null...

有谁能详细解释一下这个函数和obj = obj.offsetParent么- -感谢!

ringa_lee
ringa_lee

ringa_lee

全部回复(2)
大家讲道理

获取父级

obj = obj.parent;

获取最近的祖先定位元素,也就是有position: absolute/fixed/relative的最近的一个祖先

obj = obj.offsetParent;

你那个是一直向上递推到 body(或者递推到根节点),累加offetTop,得出你的p 距离 body 的高度

var obj = document.getElementById('aa');
var top = 0;
while (obj != document.body && obj != null) //递推 obj 到 body 或者 空 为止,注意:到...为止
{
    top += obj.offsetTop; //obj获取 到有position祖先中的offsetTop值
    obj = obj.offsetParent; //替换obj 为有position的祖先
}
PHP中文网

手机写的格式比较丑:就是沿着dom树一层层往上,把相对于offsetParent的偏移累加,直到body,这样就可以得到当前元素相对于文档的偏移。

jquery源码里面实现offset方法使用的就是类似的做法,可以看一下jquery的源码。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号