【问题标题】:Getting Position of Element from Top从顶部获取元素的位置
【发布时间】:2015-02-16 03:54:32
【问题描述】:

我知道我可以使用 jQuery 的 .position().offset(),但我不知道为什么它们不能像描述的那样工作(分别相对于父级和相对于文档)。

我有这些代码:http://jsfiddle.net/ugxag1wg/1/ http://jsfiddle.net/ugxag1wg/3/

(与 jsfiddle 相同):假设我有 5 个块,每个块高 500px,并使用以下代码:

$(".block").each(function(){
    dist = $(this).position();

    $(this).data("distance", dist.top );

    $(this).text( $(this).data("distance") );
})

如果我自己加载页面效果很好。但是,如果我不在顶部位置时刷新它(或将锚加载到顶部下方的一个块中),我将不会获得第一个块的 0 值。相反,它会否定我正在寻找的地方。

例如,如果我重新加载页面,我应该分别为块获得 0、500、1000、1500 和 2000,显示它们与父容器顶部的偏移量。但是,如果我在中途刷新页面(例如,在第 2 块)或使用锚点加载到第 2 块,我将得到 -500、0、500、1000、1500。

我尝试了.position().offset(),但结果相同。所以,我想知道的是,如何才能始终如一地获得第一个示例中的结果,无论页面加载在何处?基本上,我只想知道他们从顶部开始的位置它们的父容器。

感谢您的帮助!

编辑:我想我找到了问题所在。我有另一个容器(高度为 100vh)包装块的父容器(请参阅更新的 jsfiddle)。所以当我滚动时,是父容器移动了,但容器包装器没有。

那么,为什么使用 .position() 返回的位置不是相对于 .parent 元素,但似乎是相对于 .parent-container 元素?我应该如何解决这个问题这种情况?

【问题讨论】:

    标签: javascript jquery position offset


    【解决方案1】:

    我认为您的问题是 dist 是您定义的全局变量。更改为 var dist。您基本上每次都在覆盖它。 :/

    我还编辑了你的小提琴。请记住身体填充:) http://jsfiddle.net/ugxag1wg/2/

     html, body{
    
        padding: 0;
        margin: 0;        
     }
    

    这应该会有所帮助。

    【讨论】:

    • 感谢您的回复。嗯,它是原始代码中的一个 sn-p。我确实将 var dist 作为全局变量放在该函数之外(以及内部),两者都产生相同的结果(即未按预期工作)。该变量仅在此函数中使用,因此我不介意每次都将其覆盖而不是创建一个新变量。那么,任何想法还有什么可能是问题,或者实现我想要的替代方法?谢谢!
    • 我的小提琴没用吗?
    • JavaScript 代码没有任何更改,对吧? (我看不出有什么区别)。我确实在我的实际网站中重置了 CSS 样式(但在小提琴中没有这样做),所以我想这不是问题。
    • 我已经更新了我的问题,因为我找到了问题的原因。任何想法如何解决这个问题?我能想到的一种方法是让他们每个人减去.parent.position(),但这对我来说听起来不太有效。
    • .position() 应该按照您的要求做,所以也许最好知道您要完成什么?
    猜你喜欢
    • 1970-01-01
    • 2011-01-21
    • 2013-08-11
    • 1970-01-01
    • 1970-01-01
    • 2019-03-21
    • 1970-01-01
    • 1970-01-01
    • 2014-05-23
    相关资源
    最近更新 更多