我有一个项目,需要将页脚向上滚动(#footer
),同时以类视差效果向下滚动页面。当您开始向下滚动页面时,页脚应该开始向上移动,直到其在视口的(底部)可见。如何将页脚粘贴到页面底部,同时以类视差效果向上移动页脚?
页脚在到达视口顶部时,应该覆盖大部分前面的<div>
。
该页面可以具有类似的HTML结构是这样的:
<body>
<div id="sectionA" class="div">First section</div>
<div id="sectionB" class="div">Second section</div>
<div id="sectionC" class="div">Third section
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
</div>
<div id="footer" class="div cf">Footer</div>
</body>
视差般的效果是通过实现的JavaScript/jQuery的加入动态负值(相对定位的的top
CSS属性)页脚。下面是代码它所事项:
var $window = jQuery(window),
$footer = jQuery("#footer"),
$viewport = window.innerHeight,
$startEffect = $footer.offset().top - $viewport;
function footerParallax() {
var $scrollPos = $window.scrollTop() - $startEffect,
$ratio = 0.6;
$footer.css({
top: -($scrollPos * $ratio)
});
}
$window.scroll(function() {
footerParallax();
});
的(明显)的问题是,一旦top
财产开始得到一个负值,页脚开始从页的底部离开。
我已经准备了一个JSFIDDLE和指定的颜色给每个部分,body
以使其更清晰。滚动到底部后,页脚底部会显示body
(深红色)。
我试过了什么?
- 修改
margin-top
代替top
属性:这是卓有成效的,但如前述<div>
具有由页脚(#sectionC
在上面的例子中)覆盖重叠页脚的内容,打破其布局不管它由于它的z-index
属性而不可见(在小提琴中添加了一些浮动框以使其明显.... clearfix hack也没有帮助) - 设置
static
位置到页脚:top
或margin-top
都不会对有影响元素。 - 更改/动态减少的
#sectionC
的height
代替页脚top
以产生移动第二向上的效果:页脚停止只要height
移动等于0
(均未负大小或负补白被允许) - 将
html
和/或body
标签动态更改为height
无效。
我也尝试了一些视差插件,如skrollr和skrollr-stylesheets和其他一些。
用这种溶液(同与其他人)的问题是,它中继在以像素测量和在data
属性设置的页脚的特定(偏移)的位置,但如果动态内容的变化,例如使用的砌筑插件将文档中的元素排列在文档的另一部分,这些措施变得不准确,页脚可能会过早或过晚地移动。
顺便说一句,其他的CSS粘的页脚技术是行不通的,因为,他们实际上推页脚到页面的底部,在这里,我们正在做的正好相反。
我想这个问题可以是:
- 如何页脚坚持守到页面的底部,而它向上移动? - 或 -
- 如何降低文档的末尾和页脚的底部边缘之间的间隙
0
?
我开始认为这个问题没有一个真正的解决方案,或者我可能已经太累了,看不到明显的问题。我有兴趣学习替代解决方案或通过CSS/JavaScript/jQuery或上述所有方法进行攻击。
记住,我不问如何创建,除非完全不同的方法的视差效果(或调整现有的JS代码)解决了位置的问题。
重要:请考虑,这是一个WP网站与XHTML 1.0 Transitional DOCTYPE
,并已安装了许多其他的jQuery插件像砖石,scrollTo,jQuery UI的,等我可能已经无法控制从原来的结构改变很多东西(我不想),所以这个想法是在不破坏太多东西和模块化脚本的情况下实现它。
EDIT#1:添加了图形澄清的问题。
图A。显示常规网页滚动到最后。出于说明目的,红色方块表示视口,并且页脚(灰色)被轻微移动到右侧。
body
有一个微红的背景色(正常情况下不可见),仅用于说明目的。 注:每个部分的height
以及页脚的height
是由它们的内容(表格,图像,文本等),这样是不固定的确定。图B。显示当前问题:如果页脚向上滚动时出现视差效果(请参阅以供参考),同时向下滚动页面,它将开始覆盖上面的任何前面部分(既不修改其自身的
height
或height
)部分),并且它也开始从页面底部分离,因此body
的颜色背景变得可见。 注:越大视口(例如全屏模式)页脚向上移动(和更多的内容被它覆盖)越高图C。是预期的结果:页脚应粘在页面底部,换句话说,它应该是页面完全向下滚动后的最后一个可见元素(而不是图B中的主体背景)。每个部分(包括页脚)的内容和大小应该(理想情况下)保持不变。话虽如此,添加底部填充底部或增加其高度并不是预期的结果,因为它会破坏其原始视觉布局。
这么多的文字,我仍然不明白你想要什么。我有话要说:skrollr不需要偏移量的绝对值。例如,你可以使用'data-bottom',这意味着“当元素的底部位于视口的底部” – Prinzhorn
@Prinzhorn:将检查与skrollr,谢谢。 PS。如果你不明白文本检查jsfiddle。我想要的不是让背景可见(页脚底部和视口底部之间的红色间隙)是否有意义? – JFK
对不起,我还是不明白。也许你会发现一个已经做了你所要求的页面。 – Prinzhorn