【问题标题】:fixed when scrolling but stop at footer滚动时修复但在页脚处停止
【发布时间】:2018-04-20 09:46:39
【问题描述】:

更新 我一直在对粘性位置进行一些测试,但它在 Safari 11.1 版上不起作用。 Safari 是分析领域最高的浏览器。所以我想我仍在寻找 jQuery 解决方案。虽然 Michał Sadowski 的回答有助于分配。


我试图在滚动时获取fixed 元素,但它需要停止固定并在到达页脚时开始滚动。

我正在使用此代码:Make scrolling sidebar stop at footer

我的 CSS、HTML 和 this fiddle 现在完全一样。

但问题是,我的fixed 元素需要有一个offset of +60,因为我的标题(菜单)的高度是55px。我已经得到了工作排序的偏移量。 现在,我使用以下代码。

function sticky_relocate() {
    var window_top = $(window).scrollTop()+60;
    var footer_top = $("#footer").offset().top;
    var div_top = $('#sticky-anchor').offset().top;
    var div_height = $("#sticky").height();

    var padding = 20;  // tweak here or get from margins etc

    if (window_top + div_height > footer_top - padding)
        $('#sticky').css({top: (window_top + div_height - footer_top + padding) * -1})
    else if (window_top > div_top) {
        $('#sticky').addClass('stick');
        $('#sticky').css({top: 60})
    } else {
        $('#sticky').removeClass('stick');
    }
}

$(function () {
    $(window).scroll(sticky_relocate);
    sticky_relocate();
});

这种作品。但是当我到达#footer 时,top60px 跳转到-1.8414。所以过渡不是无缝的。当我到达页脚时它会“跳跃”。

我已经尝试了很多东西。

  • 例如将60px 添加到#sticky div。
  • 当它删除 stick 类时,我接着使用 $('#sticky').css({top: 60})

但是没有什么能带走“跳跃”有没有人可以帮助我让它工作或有类似的代码 sn-p?提前致谢!

【问题讨论】:

  • 您需要支持哪些浏览器?因为如果你可以只使用现代的,你可以添加 css:position: sticky; top: 60px;
  • 只是现代一次。不需要旧的一次......问题是它需要在到达页脚时停止修复。页脚真的很长(不要问),所以当它碰到页脚时元素应该向上滚动......

标签: javascript jquery html css


【解决方案1】:

好的,这在很大程度上取决于您的 html 结构。但是假设你有这样的:

<div class="container">
  <div class="content">
    <div class="sticky">
    </div>
  </div>
  <div class="footer">
  </div>
</div>

现在,在 css 中:

.content{
  position: relative
}
.sticky{
  position: sticky;
  top: 60px;
}

它应该完全满足您的需求。

【讨论】:

  • 哇,这个职位是粘滞的,新的还是我一直生活在岩石下?这看起来像它的工作。看着:caniuse.com/#feat=css-sticky 看起来它会支持大多数访问该网站的浏览器......是否也有 jquery 解决方案,因为在边缘它有点“闪烁”?
  • 这是一个原生解决方案,因此您可以为尚不支持它的浏览器填充它 - 但总的来说,是的,它是一个相当新的规范。
  • 我已经对sticky 位置进行了一些测试,但它不适用于 Safari 11.1 版。 Safari 是分析领域最高的浏览器。所以我想我还在寻找 jQuery 解决方案。
猜你喜欢
  • 2016-06-09
  • 1970-01-01
  • 2023-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-02
  • 2016-05-22
相关资源
最近更新 更多