在页脚之前使固定位置 Div 停止

Posted

技术标签:

【中文标题】在页脚之前使固定位置 Div 停止【英文标题】:Make Fixed Position Div Stop before footer 【发布时间】:2020-10-16 15:59:28 【问题描述】:

我有一个滚动和固定的 div 位置,我希望它在到达页脚之前停止,因为它与页脚重叠。

这是目前的代码

<script>
    $(window).scroll(function() 
        if ($(window).scrollTop() >= 330) 
            $('#stickyblock').addClass('position-fixed');
            $('#stickyblock').removeClass('sticky-top');
         else 
            $('#stickyblock').removeClass('position-fixed');
            $('#stickyblock').addClass('sticky-top');
        
    );
</script>

这会检测页眉并将 div 固定到顶部,但我希望它在碰到页脚时停止固定。

html代码

    <div id="header">Navigation and Logo</div>

<!-- First Row, here sticky element starts scrolling -->
    <div class="container">
    <div class="row>
    <div class="col-md-8">some content</div>
    <div class="col-md-4">
    <div class="sticky-top" id="stickyblock">some buttons or block of code</div>
    </div>
    <div>
    </div>
    
    <!--another row and full width container, where scroll should change from sticky to fixed-->
    <div class="container-fluid">
    <div class="row>
    <div class="col-md-8">some content</div>
    <div class="col-md-4">
    blank space(for fixed element to show)
    </div>
    <div>
    </div>
    
    <!--footer starts, here fixed div should stop-->
    <div id="footer"></div>

【问题讨论】:

你能用我现有的代码帮助我一些示例代码吗? 我已经更新了 html,我正在使用 bootstrap4 类进行固定和粘性 【参考方案1】:

您应该使用position: sticky; CSS 属性,同时指定top。您根本不需要使用 javascript。 这是一个sn-p:

.footer 
  height: 1000px;


.container 
  height: 1000px;


.sticky 
  position: sticky;
  top: 0;
<div class="container">
  <div class="sticky">Sticky bar</div>
</div>

<div class="footer">Footer</div>

如果您确实想要/需要使用 jQuery,您应该在您的 if 语句中添加检查 scrollTop() 的值是否低于页面中页脚的顶部位置。根据 jQuery 版本,以下 sn-ps 之一将适合您的情况:

if($(window).scrollTop() >= 320 && $(window).scrollTop() < $('#footer').offset().top) ...

if($(window).scrollTop() >= 320 && $(window).scrollTop() < $('#footer').offsetTop) ...

【讨论】:

嗨,克里斯蒂安,我已经用 Html 代码结构示例更新了我的问题,我使用了这个粘性类,但我需要将粘性的东西继续到其父行下方的下一行,这就是我改变的原因它从粘性到固定。这是我需要实现目标的页面示例 - api.happyvoyaging.com/en/tour-packages/114/… @GauravSingh 感谢您的通知。我还编辑了答案的最后一部分,因为我注意到我错过了一些东西。在您的情况下,第二个选项(带有额外条件)应该可以工作,因为它不关心容器的结构。请告诉它是否适合您的情况 先生,我已尝试用您的 if 语句替换我的 if 语句,这似乎不起作用。 @GauravSingh 请检查这个 JSFiddle:jsfiddle.net/y4cpbjz5 先生,我可以看到在您的小提琴中它按预期工作,但是当我在我的实时页面中实现您的代码时,它仍然与页脚重叠并且无法正常工作。【参考方案2】:

类似

var body = document.body,
    html = document.documentElement;
var height = Math.max( body.scrollHeight, body.offsetHeight, 
                       html.clientHeight, html.scrollHeight, html.offsetHeight );
var footer = document.getElementsByTagName("footer")[0];
                       
$(window).scrollTop() > height - window.height or 
$(window).scrollTop() > height - footer.height - 600 //how many pixels do you want

【讨论】:

感谢 Razvan 的创意!你和 Cristian 的代码给了我解决它的想法。

以上是关于在页脚之前使固定位置 Div 停止的主要内容,如果未能解决你的问题,请参考以下文章

将一个div固定在页脚

Phonegap JQM 固定位置页眉/页脚在关闭 iOS 键盘后移动

在页脚上重叠的滚动固定侧边栏

javascript 在没有Jquery的情况下停止页脚的固定位置

javascript 在没有Jquery的情况下停止页脚的固定位置

当滚动到达页面的某个点时,使用其他内容进行位置固定的 div 滚动