【问题标题】:jquery: Update element offset top on window resizejquery:在窗口调整大小时更新元素偏移顶部
【发布时间】:2017-12-01 14:25:31
【问题描述】:

希望这不是一个重复的问题,因为我已经为此问题搜索了一段时间,但还没有找到一个干净的解决方案。也许我只是搜索不正确。

我有一个导航栏,当它到达视口顶部时,它的位置设置为固定槽 javascript。我正在使用 jquery 1.11.3 来获取元素的 offset().top,但是当视口的垂直高度发生变化时,这个值似乎不会自行更新。

例如,在带有 Chrome 的 Android 平板电脑上,地址栏消失了,触发了“调整大小”事件,但元素的 offset().top 保持不变,导致我的导航栏保持静止,尽管它已滚动到顶部视口,现在应该修复。我还使用超时来读取调整大小的新值,但无济于事。

有没有办法让 jquery 重新考虑视口大小,这样我就不会根据新值更新我的内部偏移量?或者也许这不是要走的路?

【问题讨论】:

    标签: javascript jquery html


    【解决方案1】:

    我遇到了和你一样的问题。在调整窗口大小时,我的元素偏移值没有改变。就我而言,我的元素处于固定位置。也许你的也是?但是如果我滚动页面,元素偏移量就会改变。所以就我而言,我只是为我的元素设置了一个固定的偏移值。

    【讨论】:

    • 是的,它有固定的位置。由于我找不到一个好的解决方案,所以我只是改变了方法。
    【解决方案2】:

    尝试在您的窗口调整大小事件中实现此代码

    elementTop = $('#element').offset().top;
    windowTop = $(window).scrollTop();
    
    if( elementTop - windowTop < 0) {
     // write your set fixed position code here
    }   
    

    【讨论】:

    • 好吧,我猜这个问题不是很清楚。 $('#element').offset().top 在调整大小事件之前和之后返回相同的值。当地址栏消失时,到视口顶部的距离不再相同,但 jquery 说是。
    • 啊,好的,现在我明白了,我认为当您打开地址栏时,它会显示在您的内容上,这就是为什么它消失后 $('#element').offset( ).top 保持不变。我认为您可以尝试检测它是否是 android 平板电脑,在这种情况下,在第一次初始调整大小事件中自动减去地址栏高度从 $('#element').offset().top
    猜你喜欢
    • 1970-01-01
    • 2013-01-24
    • 2021-07-22
    • 2014-12-28
    • 1970-01-01
    • 2021-10-28
    • 2016-07-06
    • 2012-07-07
    • 1970-01-01
    相关资源
    最近更新 更多