在给定位置停止的页面底部固定div的问题

我们需要一个页脚工具栏,它位于页面底部,当页面滚动到该区域下方时,它会粘到某个区域。

我们使用以下脚本实现了这一点:

在给定位置停止的页面底部固定div

但是在某些页面上存在一个问题,其中页脚工具栏刚刚从页面中消失,然后在页面进一步向下滚动时再次出现。

我们发现此特定问题仅出现在少数页面上,当页面包含图像,video或Ajax等内容时,会在页面加载后加载填充内容(或填充空间)的其他内容。

我不知道如何解决这个问题。

这是实时网站与问题页面的链接。

http://www.sandiegopchelp.com/services/cellphone-repair/htc/

http://www.sandiegopchelp.com/top-10-tips-to-help-secure-your-computer/

http://www.sandiegopchelp.com/notes-on-the-phablet-does-the-world-need-one /

它通常在有很多评论的博客文章中更明显。 可能是由于在页面完全加载后加载了Disqus评论。

这看起来怎么样?

http://jsfiddle.net/LukeGT/NxSc3/

$(window).scroll(function() { $('#bar').css('position', 'static'); console.log($('#bar').position().top); console.log($(window).scrollTop() + $(window).height()); if ($(window).scrollTop() + $(window).height() < $('#bar').position().top + $('#bar').height()) { $('#bar').css('position', 'fixed'); } }); setTimeout(function() { $('#extra').show(); }, 1000);​ 

我通过在1秒后显示一些额外的div来模拟图像的后期加载。 我认为这个问题源于这样一个事实,即在条形码的代码运行之后页面的高度发生了变化,因此如果页面较短(没有图像/ ajax等),它的行为应该如此。

我所做的只是在每次滚动页面时将栏放在页面底部的位置,从顶部计算其高度,并将其与滚动高度进行比较。 如果我们太远了,它会将条形图定位在页面底部的固定位置,否则将其单独放置。 它在Chrome中运行顺畅,但我没有在其他地方测试过。

我想这是$(window).height()函数的问题。 点击这里 对于所有动态内容,如图像,video或加载Ajax的内容,高度不会添加到$(window).height()的结果中,除非在HTML或CSS的某处指定(并且从引用的链接我看到这个仅在Chrome中发生。您可能想要确认这一点)。 对于这些动态内容,您可以尝试在相应样式的html或height属性中添加height属性。

这不是答案,但我在检查您的网站时发现了一些东西…这是您真正的HTML,当它的工作正常,你想要..

  

但是当它不起作用时, Position属性正在从Fixed变为Relative

  

你可以检查你的脚本或在这里发布你的脚本……

在初始状态,您的div处于position: relative因此其偏移量基于容器元素,而不是页面的总高度。 变量stickyOffset是基于该相对偏移量设置的,这就是为什么它在滚动时比预期更快地剪辑,以及为什么它在JSFiddle中工作,因为容器有页面(Iframe)本身。

$(document).ready函数中,您需要在包含元素的顶部添加页脚的偏移量以及偏移量的其余部分,以便偏移量基于总页数而不是包含DIV。

希望有所帮助。

通过使用chrome查看http://www.sandiegopchelp.com/services/cellphone-repair/htc/上的示例,我可以看到您的页脚在进入“相关链接”部分时消失。 此时,您将页脚的位置设置为“相对”,因此它将在文档的常规流程中替换它,并且其位置实际上位于“相关链接”部分下方,这就是它从屏幕上消失的原因(在“相关”下方)链接”)。

但是你计算了它应该在页面加载时成为相对位置的位置,只有在你添加了“相关链接”部分后才重新计算它,因为它改变了页面高度(我知道你之后添加了,我是对的吗?)。

尝试在粘性div的位置上方添加零高度div,在页面resize时将保留在该位置,然后在滚动时检查该位置以确定粘性div应停止的位置。

最后通过两种技术修复它,尽可能使用CSS设置显式高度,并在加载所有图像后延迟jQuery函数。 请参阅: 延迟一些jQuery函数,直到所有图像完全加载